Как извлечь данные из точек ближе к нужному месту в R? - PullRequest
0 голосов
/ 19 октября 2019

у меня два data.frame. У FakeData есть Long & Lat вместе с данными, в то время как у ExCor есть Long & Lat точек, из которых я хотел бы извлечь данные из FakeData. ExCor следует извлекать данные только из ближайших точек. Вот некоторые примеры данных, которые начинаются с

rm(list = ls())

DF1 = data.frame(t(data.frame(Grids = 1:5, Long = runif(5, min = 5, max = 10), Lat = runif(5, min = 2, max = 3))))
DF2 = data.frame(X1 = runif(1095, 0.5,1), X2 = runif(1095, 1.5,2), X3 = runif(1095, 0.5,1.5), X4 = runif(1095, 0.5,6), X5 = runif(1095, 0.5,15))
FakeData = rbind(DF1, DF2)

ExCor = data.frame(t(data.frame(Long = runif(3, 7, 9), Lat = runif(3, 2,3))))

Любые мысли приветствуются.

1 Ответ

0 голосов
/ 20 октября 2019

Одним из многих способов достижения этого является использование предиката st_nearest_feature в sf::st_join. Однако сначала вам нужно перенастроить структуру данных, чтобы она была более совместимой с пакетами, работающими с пространственной геометрией.

library(sf)

# Reshape datasets so that coords and attributes are columns, not rows
ExCor <- setNames(do.call(rbind.data.frame, ExCor), row.names(ExCor))
FakeData <- setNames(do.call(rbind.data.frame, FakeData), row.names(FakeData))

# Convert to sf objects
FakeData_sf <- st_as_sf(FakeData, coords=c('Long', 'Lat'))
ExCor_sf <- st_as_sf(ExCor, coords=c('Long', 'Lat'))

# Spatial join nearest feature
newdat <- st_join(ExCor_sf, FakeData_sf, join=st_nearest_feature)

Затем вы можете снова записать в .csv, если хотите .. .

st_write(newdat, 'newdat.csv', layer_options='GEOMETRY=AS_XY')
...