【发布时间】:2021-06-07 09:04:43
【问题描述】:
在我在这里获得了许多帮助之后,我成功地运行了这些下一个特定的连接。一步一步,我正在更新我的主要 DT:
DT1 <- data.table(crit = rep(c('AA', 'BB', 'CC', 'DD'),each = 3),
num = rep(1:3, 4),
val = rnorm(12)^2)
DT1
DT2 <- data.table(BB = c(1,3),
cross = c(128, 183))
DT2
DT3 <- data.table(DD = c(2,3),
cross = c(99, 787))
DT3
DT1[DT2[, c(.(crit = 'BB'), .SD)] , cross := ifelse(is.na(cross), i.cross, cross), on = .(crit, num = BB)]
DT1[DT3[, c(.(crit = 'DD'), .SD)] , cross := ifelse(is.na(cross), i.cross, cross), on = .(crit, num = DD)]
但是,我认为我需要通过mapply 循环。类似的东西:
mapply(fun.join, DTmain = DT1, DTsec = DT2, MoreArgs = list('BB'))
mapply(fun.join, DTmain = DT1, DTsec = DT3, MoreArgs = list('DD'))
但我似乎无法编写正确的函数 fun.join。
感谢您的帮助!
【问题讨论】:
-
你想要的输出是什么?我看到很多奇怪的代码,我不知道你要去哪里。
-
对不起,我没有注意到你的回答。我有两个主要的 data.table,DT1 和 DTX。从 DTX,我创建了许多子 DT(在我的示例中为 DT2、DT3 等)。然后,我必须将所有这些子 DT 与 DT1 连接起来,以便更新 DT1 中的同一列。
标签: r join data.table apply mapply