Reputation: 45
I am trying to merge two data sets by columns:
> x
ID XD
1 sll0001 A
2 sll0002 B
3 sll0003 C
> y
ID XD
1 sll0001 go_0002
2 sll0001 go_0003
3 sll0003 go_0003
4 sll0003 go_0004
5 sll0004 go_0005
And I would like to get something like this:
> xy
ID XD XD.1 XD.2
1 sll0001 A go_0002 go_0003
2 sll0002 B <NA> <NA>
3 sll0003 C go_0004 <NA>
4 sll0004 <NA> go_0005 <NA>
My problem is that cbind() does not permit to use duplicated row names. Any idea? thanks!
Upvotes: 1
Views: 1369
Reputation: 118789
Using data.table
:
require(data.table)
xx <- data.table(x, key="ID")
yy <- data.table(y, key="ID")
idx <- seq_len(max(yy[, .N, by=ID]$N))
merge(xx, yy[, as.list(XD[idx]), by=ID], by="ID", all=TRUE)
ID XD V1 V2
1: sll0001 A go_0002 go_0003
2: sll0002 B NA NA
3: sll0003 C go_0003 go_0004
4: sll0004 NA go_0005 NA
Upvotes: 1