Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 随机选择样本点的地理聚类_R_Spatial_Random Sample_Spatial Query - Fatal编程技术网

R 随机选择样本点的地理聚类

R 随机选择样本点的地理聚类,r,spatial,random-sample,spatial-query,R,Spatial,Random Sample,Spatial Query,我有一个可用的采样站表,其中包含唯一标识符GRID\u ID,以及每个站的纬度和经度(和UTM)。我想随机选择这些站点的一个子集,我可以使用sample()轻松地完成这项工作 然而,为了最大限度地提高效率,我还想通过指定任何随机选择的采样站必须在距离其他站至少y的x范围内来使用一些聚类 基本原理是,长途旅行对一组y站点进行采样是有意义的,但长途旅行对

我有一个可用的采样站表,其中包含唯一标识符
GRID\u ID
,以及每个站的纬度和经度(和UTM)。我想随机选择这些站点的一个子集,我可以使用
sample()
轻松地完成这项工作

然而,为了最大限度地提高效率,我还想通过指定任何随机选择的采样站必须在距离其他站至少
y
x
范围内来使用一些聚类

基本原理是,长途旅行对一组
y
站点进行采样是有意义的,但长途旅行对
站点进行采样是没有意义的

这有意义吗?在R中有没有一种简单的方法来处理这个问题?

这个怎么样:

# some random data
set.seed(1) 
df <- data.frame(x=runif(10), y=runif(10))

# e.g. select obs that have >= 1 neighbour closer than .3 (euclidean)
mat <- as.matrix(dist(df))
sel <- rowSums(mat < .3) >= 2 
plot(y~x, df, col = sel + 1L) # viz

# e.g. select obs that have >= 2 neighbours closer than 40000 (great circle/lon,lat)
library(geosphere)
mat <- distm(as.matrix(df))
sel <- rowSums(mat < 40000) >= 3 
plot(y~x, df, col = sel + 1L) # viz

# Take 2 random obs from those who meet the criteria
df[sample(which(sel), size = 2), ] 
#一些随机数据
种子(1)
df=1比0.3更接近(欧几里德)
mat=40000(大圆/长,纬度)附近的2个邻居
图书馆(地球圈)
mat这个怎么样:

# some random data
set.seed(1) 
df <- data.frame(x=runif(10), y=runif(10))

# e.g. select obs that have >= 1 neighbour closer than .3 (euclidean)
mat <- as.matrix(dist(df))
sel <- rowSums(mat < .3) >= 2 
plot(y~x, df, col = sel + 1L) # viz

# e.g. select obs that have >= 2 neighbours closer than 40000 (great circle/lon,lat)
library(geosphere)
mat <- distm(as.matrix(df))
sel <- rowSums(mat < 40000) >= 3 
plot(y~x, df, col = sel + 1L) # viz

# Take 2 random obs from those who meet the criteria
df[sample(which(sel), size = 2), ] 
#一些随机数据
种子(1)
df=1比0.3更接近(欧几里德)
mat=40000(大圆/长,纬度)附近的2个邻居
图书馆(地球圈)

mat这可能会给你指出正确的方向。我不认为“聚类分析”是合适的术语。相反,考虑两个阶段的抽样过程:首先对旅游目的地进行抽样(这可能指向正确的方向)。我不认为“聚类分析”是合适的术语。相反,考虑两个阶段的抽样过程:首先对旅游目的地进行抽样。(这看起来是一个很好的方法,尽管我的初始可用采样站集是一个网格(渔网)因此,在进行随机选择之前,任何给定的站点都会有多个相邻的邻居。我已将采样站网格的示例上载到:抱歉,但我不知道数据集是关于什么的。我看到一些岛屿周围的地理坐标,但仅此而已。也许你可以在“我需要一个由x分组的n个lat_deg/lon_deg行的样本"或者别的什么。总之,可能最好发布一个新问题——包括数据和你尝试过的可复制的例子。谢谢你,卢卡。这只是一个由约31000个等间距点组成的网格,覆盖了夏威夷的主要岛屿。我需要随机选择约250个点进行采样,但我需要以某种方式限制随机sam链接,这样结果就排除了单个点或小团体(DropBox)是完全可以的。为了得到你问题的答案,最好包括你的数据(相关部分)或它的样本,让用户通过复制/粘贴轻松重现你的问题。我编辑了这篇文章,展示了另一种方法。(尽管我必须承认,我在基于密度的聚类方面没有太多经验)也请注意
下载.file
读取.csv
,如果你打算发布的话,你应该在另一篇文章中包含它们。这看起来是一个不错的方法,尽管我最初的可用采样站集是一个网格(渔网)因此,在进行随机选择之前,任何给定的站点都会有多个相邻的邻居。我已将采样站网格的示例上载到:抱歉,但我不知道数据集是关于什么的。我看到一些岛屿周围的地理坐标,但仅此而已。也许你可以在“我需要一个由x分组的n个lat_deg/lon_deg行的样本"或者别的什么。总之,可能最好发布一个新问题——包括数据和你尝试过的可复制的例子。谢谢你,卢卡。这只是一个由约31000个等间距点组成的网格,覆盖了夏威夷的主要岛屿。我需要随机选择约250个点进行采样,但我需要以某种方式限制随机sam链接,这样结果就排除了单个点或小团体(DropBox)是完全可以的。为了得到你问题的答案,最好包括你的数据(相关部分)或它的样本,让用户通过复制/粘贴轻松重现你的问题。我编辑了这篇文章,展示了另一种方法。(尽管我必须承认我在基于密度的集群方面没有太多经验)也请注意
download.file
read.csv
,如果你打算这样做的话,你应该在另一篇文章中包含这些内容。
res <- dbscan(as.matrix(df), eps = .005, minPts = 4, borderPoints=F)
# DBSCAN clustering for 31083 objects.
# Parameters: eps = 0.005, minPts = 4
# The clustering contains 134 cluster(s).
# Available fields: cluster, eps, minPts

noise <- res$cluster == 0
sum(noise)
# [1] 2499

# interactive plot with zoom 
# (draw rectangle with right mouse, 
# CTRL to reset)
library(iplot)
iplot(df$lon_deg, df$lat_deg, col=noise + 1L) 
idx <- sample(which(!noise), 250)
fullds[idx, ]