У меня есть два data.frame
, которые имеют 3 столбца: 1. 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
, поскольку вы не указали его в желаемом выводе. - person David Arenburg   schedule 16.08.2016setdiff
, by = id. - person IRTFM   schedule 16.08.2016