【发布时间】:2015-01-25 22:27:00
【问题描述】:
我有一个如下所示的数据框:
SITE_ID <- c("A", "B", "C", "D")
LAT <- c(450799, 450824, 450825, 450825)
LONG <- c(6513879, 6513873, 6513873, 6513874)
YEAR <- c(2006, 2006, 2007, 2008)
data <- data.frame(SITE_ID, LAT, LONG, YEAR)
在一系列年份中,每年都会对一系列地点进行抽样并记录其 UTM 坐标,但地点名称每年都不一致。我想通过数据框搜索并找出有多少站点(行)可能是另一年的同一站点,使用的条件 both 站点的纬度和经度应该在范围内2 个 UTM 单元相互连接,以便被视为同一个站点。例如,在上面的数据框中,Site_ID B、C 和 D 都应该被视为同一个站点。因此,对于每一行,我都需要一个新名称,例如,具有更正 Site_ID 名称的新列(在上面的示例中,站点 B、C、D 将重命名为站点 1 或类似名称)。
我尝试使用 for 循环查看 2 行之间的纬度和经度之间的差异,但索引存在问题。我想知道如何使这个循环检查每一行与其他每一行并在长度(数据 [,1])处停止。
count <- 0
for (i in 1:length(data[,1])) {
for (j in 1:length(data[,1])) {
if (abs(data$LAT[i] - data$LAT[i+1]) <
2 & abs(data$LONG[i] - data$LONG[i+1]) < 2)
count <- count + 1
print(rownames(data[i]))
}
}
我也尝试使用 sqldf() 包,但这似乎等同于子集()。感谢您的任何见解。
【问题讨论】:
-
我相信
spDists(SpatialPointsDataFrame(cbind(LONG, LAT), data=data[,c(1,4)], proj4string=CRS("+proj=utm +zone=10 +datum=WGS84"))) < 2(使用正确的区域)会给你一个 n x n 矩阵,其中包含彼此接近的内容(2UTM 或更少) )。
标签: r