gpt4 book ai didi

r - 递归地合并(完全连接)一个 data.table 与另一 data.table 的每一组

转载 作者:行者123 更新时间:2023-12-02 20:47:45 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com