我有 2 个数据表:
a.id <- c("a","a","a","b","b","c","c","c","c")
b.id <- c(1,2,3,4,5,1,3,4,5)
x <- seq(1:9)
dt1 <- data.table(a.id,b.id,x)
和
rp <- c("r","s")
t <- rep(rp, each=5)
b.id <- rep(1:5, 2)
y <- sample.int(50, 10)
dt2 <- data.table(t, b.id, y)
对于dt1
的每个a.id
,我想完全连接dt2
的每个t
,按列将它们添加到 dt1
中,并为列指定名称和 t
的值。由于这是完全连接,因此 dt1
中所有缺失的 x(b.id)
都将添加 NA
。
这是所需的输出(对于 r 和 s,这些是随机值):
a.id b.id x r s
a 1 1 14 40
a 2 2 42 25
a 3 3 32 11
a 4 NA 33 3
a 5 NA 21 1
b 1 NA 14 40
b 2 NA 42 25
b 3 NA 32 11
b 4 4 33 3
b 5 5 21 1
c 1 6 14 40
c 2 NA 42 25
c 3 7 32 11
c 4 8 33 3
c 5 9 21 1
我尝试过类似的方法:
dt1[, merge(.SD, dt2, by = "b.id", all = TRUE), by = a.id]
但是它不起作用。
非常感谢您对这个问题的帮助。 谢谢你的时间。
最佳答案
尝试如下:
f<-dcast(dt2,b.id~t)
dt1[f[rep(1:nrow(f),uniqueN(dt1$a.id)),
c(.SD,list(a.id=rep(unique(dt1$a.id),each=nrow(f))))],on=c("a.id","b.id")]
# a.id b.id x r s
# 1: a 1 1 40 28
# 2: a 2 2 4 17
# 3: a 3 3 11 13
# 4: a 4 NA 49 42
# 5: a 5 NA 29 37
# 6: b 1 NA 40 28
# 7: b 2 NA 4 17
# 8: b 3 NA 11 13
# 9: b 4 4 49 42
#10: b 5 5 29 37
#11: c 1 6 40 28
#12: c 2 NA 4 17
#13: c 3 7 11 13
#14: c 4 8 49 42
#15: c 5 9 29 37
结果有所不同,因为尚未设置种子
。
关于r - 递归地合并(完全连接)一个 data.table 与另一 data.table 的每一组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43607350/