查找dataframe列和第二个数据帧之间的相交

时间:2017-12-13 12:32:12

标签: r

我有两个数据框:

dataframe A

    v1  v2  v3
1   wn123   wrr002  tee893
2   ms567   NA  NA
3   NA  sud3003 wrt2229
4   wrs92929    wrw036  syc3647

dataframe B

ID  TN
1   ms567
2   sud3003
3   syc3647
4   wn123
5   wrr002
6   wrs92929
7   wrt2229
8   wrw036

我想找到数据帧A的3列(每行,每列中v1,v2和v3的所有元素)和数据帧B $ x的整列之间的重叠。

作为新数据帧C的所需输出如下:

v1    v2    
wn123   wrr002
ms567    NA 
sud3003 wrt2229
syc3647 wrw036    syc3647

我试过这样编写代码:

getIntersect <- function(x,y){  
return(intersect(x,y))
}

data.frame(apply(A[v1:v3],2, function(x){getIntersect(x,B$TN)}))

代码不起作用。有关如何使此代码正常工作的任何建议吗?

1 个答案:

答案 0 :(得分:2)

据我了解这个问题,OP只想保留A中出现的B条目。

这可以通过使用melt()从长格式转换为长格式,加入长格式并使用dcast()重新形成宽格式来解决:

library(data.table)
setDT(B)[melt(setDT(A)[, rn := .I], id.vars = "rn"), on = .(TN = value), nomatch = 0L][
  , dcast(.SD, rn ~ rowid(rn, prefix = "V"), value.var = "TN")]
   rn       V1      V2      V3
1:  1    wn123  wrr002      NA
2:  2    ms567      NA      NA
3:  3  sud3003 wrt2229      NA
4:  4 wrs92929  wrw036 syc3647