问题
My question is similar to Merging two data frames, both with coordinates based on the closest location. I would like to merge two dataframes in R by latitude and longitude:
Dataframe 1
structure(list(lat = c(54L, 55L, 51L, 54L, 53L, 50L, 47L, 51L,
49L, 54L), lon = c(14L, 8L, 15L, 7L, 6L, 5L, 13L, 5L, 13L, 11L
), PPP2000_40 = c(4606, 6575, 6593, 7431, 9393, 10773, 11716,
12226, 13544, 14526)), .Names = c("lat", "lon", "PPP2000_40"), row.names =c(6764L, 8796L, 8901L, 9611L, 11649L, 12819L, 13763L, 14389L, 15641L,
16571L), class = "data.frame")
# Dataframe 2
structure(list(lat = c(47, 47, 47, 47, 47, 47, 48, 48, 48, 48
), lon = c(7, 8, 9, 10, 11, 12, 7, 8, 9, 10), GDP = c(19.09982,
13.31977, 14.95925, 6.8575635, 23.334565, 6.485748, 24.01197, 14.30393075, 21.33759675, 9.71803675)), .Names = c("lat", "lon", "GDP"), row.names = c(NA, 10L), class = "data.frame")
How can I merge them in R? Thanks!
回答1:
Based on this post:
library(geosphere)
mat <- distm(df1[,c('lon','lat')], df2[,c('lon','lat')], fun=distVincentyEllipsoid)
df1$GDP <- df2$GDP[apply(mat, 1, which.min)]
the result is then:
> df1
lat lon PPP2000_40 GDP
6764 54 14 4606 9.718037
8796 55 8 6575 14.303931
8901 51 15 6593 9.718037
9611 54 7 7431 24.011970
11649 53 6 9393 24.011970
12819 50 5 10773 24.011970
13763 47 13 11716 6.485748
14389 51 5 12226 24.011970
15641 49 13 13544 6.485748
16571 54 11 14526 9.718037
来源:https://stackoverflow.com/questions/40074926/merge-by-lat-lon-in-r