在R中合并lat / lon

时间:2016-10-16 20:08:27

标签: r dataframe merge spatial

我的问题类似于Merging two data frames, both with coordinates based on the closest location。我想通过纬度和经度合并R中的两个数据帧:

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")

如何在R中合并它们?谢谢!

1 个答案:

答案 0 :(得分:2)

基于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)]

结果是:

> 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