2017-06-08 25 views
1

2つのデータセットを同じ名前の列でマージすることはできますか?2つのデータを同じ名前でマージしますか?

country <- c("United States of America", "China", "Russia Federation") 
scores <- c(1, 2, 3) 
df.1 <- cbind(country, scores) 

country <- c("United States", "China", "Russians") 
scores <- c(3, 2, 1) 
df.2 <- cbind(country, scores) 

unsucessful.merge <- merge(df.1, df.2, by=c("country")) 
unsucessful.merge 
> country scores.x scores.y 
> 1 China  2  2 

ご覧のとおり、合併後、米国とロシアは削除され、中国が残っています。

successful.merge 
>     country scores.x scores.y 
> 1     China  2  2 
> 2  Russia Federation  3  1 
> 3 United States of America  1  3 
+2

https://cran.r-project.org/web/packages/countrycode/countrycode.pdf – Masoud

+1

。別の名前をすべてコードにマップし、それをマージします。 https://cran.r-project.org/web/packages/fuzzyjoinのように、参加のあいまいさに対処できるパッケージがありますが、明らかにこれは、「北朝鮮/北朝鮮」、ミャンマー/ビルマ(略称や歴史的名称は遠隔地でもない)。 – thelatemail

+0

ありがとうございます。このデータフレームが何か他のものを分類していたのかどうか、似たような名前で2つのデータセットをマージする方法があるのだろうかと思います。 –

答えて

0

すべての国名順列がすでに分かっている場合は、正規表現を使用できます。私は@Masoudは正しい考えを持っていると思う

df.1 <- apply(df.1,2,function(x) gsub(".*United States.*|USA","United States",x,ignore.case=T)) 
df.1 <- apply(df.1,2,function(x) gsub(".*Russia.*","Russia",x,ignore.case=T)) 
df.2 <- apply(df.2,2,function(x) gsub(".*United States.*|USA","United States",x,ignore.case=T)) 
df.2 <- apply(df.2,2,function(x) gsub(".*Russia.*","Russia",x,ignore.case=T)) 
merge(df.1, df.2, by=c("country")) 
     country scores.x scores.y 
1   China  2  2 
2  Russia  3  1 
3 United States  1  3 
+0

私はdownvoterではなく 'apply(df.1,2、...)'はすべての変数を 'df.1'の同じ型に変換するので理想的ではありません。 'df.1'の' country'カラム以外のカラムのデータも置き換えます。確かに、OPは 'data.frame(国、得点) 'の代わりに' cbind(国、得点) 'のために文字マトリックスを使用することは既に不本意ですが、' apply'は不要です。単にdf.1 [、 "country"] < - gsub(find、replace、df.1 [、 "country"]) 'はより具体的です。 – thelatemail

+0

誠にありがとうございます。私はとても感謝しています。今は遅刻だから、明日それを見てみましょう。再び、非常に感謝します。私は負担を和らげるために下降声を上げました++ –

関連する問題