我有两个数据框:
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)}))
代码不起作用。有关如何使此代码正常工作的任何建议吗?
答案 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