我有一个如下所示的数据框:
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()包,但这似乎相当于subset() . 感谢您的任何见解 .
1 回答
你可以尝试这个解决方案: