Я пытаюсь объединить два набора данных, которые содержат GPS-координаты, так что я остаюсь одним набором данных с переменными из обоих наборов данных. Я пытаюсь использовать функцию для достижения этой цели. Проблема в том, что координаты GPS с обоих наборов данных точно не совпадают. Таким образом, задача заключается в сопоставлении переменных одного набора данных с переменными другого набора данных путем нахождения ближайшего спаривания координат gps.Попытка создать функцию для объединения двух наборов данных по ближайшей координате gps
У меня был успех с пакетом нечетких соединений, но он смог получить частичное совпадение (~ 75%). С приведенной ниже функцией я надеялся получить более высокую степень соответствия. Один набор данных короче другого, поэтому идея заключалась в том, чтобы использовать два для циклов, причем каждый цикл для каждого цикла проходит через каждый набор данных.
Установлен «якорь» (расстояние между первыми наблюдениями обоих наборов данных), так что, если расстояние между двумя точками меньше якоря, новое (более короткое) расстояние становится новым якорем. Цикл for продолжается до тех пор, пока не будет найдено самое короткое расстояние, а переменные из обоих наборов данных будут добавлены к концу нового набора данных, называемого здесь pairedData. Мне нужно оставить набор данных до тех пор, пока используется самый короткий набор данных (6314 строк) с данными, взятыми из обоих наборов данных.
Я думаю, что функция должна работать, но функция rbind() очень медленная, и у меня возникли проблемы с реализацией rbindlist(). Любые идеи о том, как я могу это достичь?
combineGPS <- function(harvest,planting) {
require(sp)
require(data.table)
longH <- harvest$long
latH <- harvest$lat
longP <- planting$long
latP <- planting$lat
rowsH <- nrow(harvest)
rowsP <- nrow(planting)
harvestCoords <- cbind(longH,latH)
harvestPoints <- SpatialPoints(harvestCoords)
plantingCoords <- cbind(longP,latP)
plantingPoints <- SpatialPoints(plantingCoords)
#planting данные короче, чем данные урожая
#need принимать каждую строку данных посадки (6314) и найти ближайшую точку данных урожая (16626), а затем прикрепить
anchor <- spDistsN1(plantingPoints[1,],harvestPoints[1,],longlat=FALSE)
pairedData <- data.frame(long=numeric(),
lat=numeric(),
variety=factor(),
seedling_rate=numeric(),
seed_spacing=numeric(),
speed=numeric(),
yield=numeric(),
stringsAsFactors=FALSE)
for (p in 1:rowsP){
for (h in 1:rowsH){
if(spDistsN1(plantingPoints[p,],harvestPoints[h,],longlat=FALSE) <= anchor){
anchor <- spDistsN1(plantingPoints[p,],harvestPoints[h,],longlat=FALSE)
pairedData[p,]<-c(planting[p,]$long, planting[p,]$lat, planting[p,]$variety, planting[p,]$seedling_rate, planting[p,]$seed_spacing, planting[p,]$speed, harvest[h,]$yield)
}
}
}
return(pairedData)
}
doesItWork=combineGPS(harvest,planting)
doesItWork