2016-05-19 159 views
0

如何使用R匹配两列不同数据帧?匹配的值应该在相同的位置对齐,缺失的值将是NAs。匹配不同数据帧的两列

输入:

df1$A: w x y 
df2$B: x y z 

预期的输出数据帧:

w x y NA 
NA x y z 
+0

我们可以使用'match' – akrun

+0

'合并(DF1,DF2,by.x = 'A',by.y = 'B',所有= TRUE)'? – Jaap

+0

请阅读[问]的信息,以及如何给[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Jaap

回答

0

嗯,这工作得很好...

df1$B <- ifelse(df1$A %in% df2$B, as.character(df1$A), NA)

df3 <- merge(df1,df2,by='B',all.x = T,all.y = T)

+0

我认为ifelse不是必需的,'merge(df1,df2,by.x ='A',by.y ='B',all = TRUE)'只要我能判断atm就行。 – Jaap

+0

@ProcrastinatusMaximus嗯,这只是给我(A:W x Y Z)作为一个单列数据帧输出...你确定它有效吗? – Gaurav

+0

取决于OP真正想要什么(这不是atm清楚) – Jaap

1

应该有更好的方式来表示这一点,但现在我可以弄清楚这一点。作为由@akrun评论中提到,您可以使用match

unique(rbind(cbind(as.character(df1$A), as.character(df2$B[match(df1$A, df2$B)])), 
      cbind(as.character(df2$B), as.character(df1$A[match(df2$B, df1$A)])))) 



# [,1] [,2] 
#[1,] "w" NA 
#[2,] "x" "x" 
#[3,] "y" "y" 
#[4,] "z" NA