2016-06-30 10 views
1

I zwei Datenrahmen habenmerge 2-Datenrahmen von 1: 2-Säule Verhältnis

df1=data.frame(w=c(10,'a','a',14,''),data='other stuff') 
df2=data.frame(c=10:14,n=letters[1:5],data='stuff') 
> df1;df2 
    w  data 
1 10 other stuff 
2 a other stuff 
3 a other stuff 
4 14 other stuff 
5 other stuff 
    c n data 
1 10 a stuff 
2 11 b stuff 
3 12 c stuff 
4 13 d stuff 
5 14 e stuff 

Ich mag würde zu einer endgültigen df, die wie (hergestellt Hand) aussieht:

10 stuff other stuff 
a  stuff other stuff 
a  stuff other stuff 
14 stfff other stuff 
     stuff other stuff 

ich versuchte

merge(df1,df2,by.x='w',by.y='c|n') 

vergeblich, und bin mir nicht sicher, wie man das löst. Beachten Sie, dass DF1 und DF2 sind 1000s von 48 Dimensionen

+0

Was halten Sie die Spaltennamen der endgültigen Datenrahmen sein wollen ? Sie scheinen eine Spalte mit demselben Namen in jedem der separaten Datenrahmen zu haben. –

+0

Die Übereinstimmung ist von Spalte w, und die Werte sind nicht konsistent. Einige Werte sind numerisch und andere sind char. Ich hatte gehofft, alles auf einmal zu verschmelzen – alex

+0

Können Sie Werte in Datenspalte in 1,2,3, ... etc ändern, damit wir die erwartete Ausgabe verstehen können. – zx8754

Antwort

3

Wir df2 verwandeln kann eine Schlüsselspalte zu machen mit DF1 dann verwenden merge zum Spiel:

#dummy data updated data columns 
df1 = data.frame(w = c(10,'a','a',14,''), data = paste('otherStuff', 1:5)) 
df2 = data.frame(c = 10:14, n = letters[1:5], data = paste('stuff', 1:5)) 

df1;df2 

# w   data 
# 1 10 otherStuff 1 
# 2 a otherStuff 2 
# 3 a otherStuff 3 
# 4 14 otherStuff 4 
# 5 otherStuff 5 

# c n data 
# 1 10 a stuff 1 
# 2 11 b stuff 2 
# 3 12 c stuff 3 
# 4 13 d stuff 4 
# 5 14 e stuff 5 


library(dplyr) 
library(tidyr) 

merge(df1, 
     gather(df2, key = "Group", value = "w", -data), 
     by = "w", all.x = TRUE) 


# w  data.x data.y Group 
# 1 otherStuff 5 <NA> <NA> 
# 2 10 otherStuff 1 stuff 1  c 
# 3 14 otherStuff 4 stuff 5  c 
# 4 a otherStuff 2 stuff 1  n 
# 5 a otherStuff 3 stuff 1  n