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, ]