我有两个data.frame
,它们都有3列:
id
- 一个唯一的键target
- 分号分隔的唯一值source
- 两个data.frame
中的每个都相似但不同。
这是模拟数据:
set.seed(1)
df.1 <- data.frame(id=LETTERS[sample(length(LETTERS),10,replace=F)],
target=sapply(1:10,function(x) paste(LETTERS[sample(length(LETTERS),5,replace=F)],collapse=";")),
source="A",stringsAsFactors=F)
df.2 <- data.frame(id=LETTERS[sample(length(LETTERS),5,replace=F)],
target=sapply(1:5,function(x) paste(LETTERS[sample(length(LETTERS),5,replace=F)],collapse=";")),
source="B",stringsAsFactors=F)
我正在寻找一个能够将两个
data.frame
合并,并创建3列的函数:1.
intersected.targets
- 这是两个data.frame
之间唯一的交集,用分号隔开。2.
source1.targets
- 这是第一个data.frame
独有的目标值。3.
source2.targets
- 这是第二个data.frame
独有的目标值。因此对于以上示例,生成的
data.frame
将会是:> res.df
id intersected.targets sourceA.targets sourceB.targets
1 G NA F;E;Q;I;X <NA>
2 J NA M;R;X;I;Y <NA>
3 N NA Y;F;P;C;Z <NA>
4 U NA K;A;J;U;H <NA>
5 E NA M;O;L;E;S <NA>
6 S NA R;T;C;Q;J <NA>
7 W NA V;Q;S;M;L <NA>
8 M NA U;A;L;Q;P <NA>
9 B NA C;H;M;P;I <NA>
10 X NA <NA> G;L;S;B;T
11 H NA <NA> I;U;Z;H;K
12 Y NA <NA> L;R;J;H;Q
13 O NA <NA> F;R;C;Z;D
14 L V M;K;F;B X;J;R;Y
library(data.table) ; dcast(rbind(setDT(df.1), setDT(df.2)), id ~ source, value.var = "target")
开始。不确定你在intersected.targets
列中想要什么,因为你没有在所需的输出中指定它。 - David Arenburgsetdiff
,by=id。 - IRTFM