у меня есть кадр данных, который выглядит следующим образом:Соответствие строк в dataframe по диапазону значений в двух столбцах
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 но названия сайтов не соответствуют из года в год. Я хочу выполнить поиск по кадру данных и выяснить, сколько сайтов (строк), вероятно, одного и того же сайта с другого года, используя критерии, которые и, широта и долгота для сайта должны быть в пределах 2 единицы UTM каждого другой для того, чтобы считаться одним и тем же сайтом. Например, в приведенном выше кадре данных Site_ID B, C и D следует рассматривать как один и тот же сайт. Поэтому для каждой строки я хотел бы получить новое имя, например, новый столбец с исправленным именем Site_ID (в приведенном выше примере сайты B, C, D будут переименованы в сайт 1 или некоторые из них).
Я попытался использовать цикл for, где я рассматривал разницу между широтой и долготой между двумя строками, но имел проблемы с индексированием. Я хотел бы знать, как сделать этот цикл проверкой каждой строки по каждой другой строке и остановить ее длину (данные [, 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), данные = данные [, с (1,4)], proj4string = CRS (" + проектируемый = utm + zone = 10 + datum = WGS84 "))) <2' (используйте правую зону) даст вам _n_ x _n_ матрицу того, что рядом друг с другом (2UTM или меньше). – hrbrmstr