2016-10-16 8 views
0

私の質問はMerging two data frames, both with coordinates based on the closest locationに似ています。私はRで2つのデータフレームを緯度と経度でマージしたいと思っています:緯度/経度でのマージ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でどのようにマージできますか?ありがとう! this postに基づいて

答えて

2

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 
+0

はありがとうございました。私は図書館と機能を読み上げますが、もう少し詳しい情報を提供することができます – shouro

+0

ありがとうございました。私は図書館と機能について読んでいますが、この部分についてもう少し詳しくお聞かせください。 'df1 $ GDP < - df2 $ GDP [apply(mat、1、which.min)]' – shouro

+0

@shouro [リンクされた回答](http://stackoverflow.com/a/31668415/3526832)では私はかなりよく説明した。 – h3rm4n