我有两个结构相同的data.table,其中包含两个键列和若干数据列。 数据列的数量可能会变化。 我想将第二个data.table中的值添加到第一个data.table相应的行/列中。
DT1 <- cbind(data.table(loc=c("L1","L2","L3"), product=c("P1","P2","P1")), matrix(10,nrow=3,ncol=12))
setkey(DT1, loc, product)
DT1
loc product V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1: L1 P1 10 10 10 10 10 10 10 10 10 10 10 10
2: L2 P2 10 10 10 10 10 10 10 10 10 10 10 10
3: L3 P1 10 10 10 10 10 10 10 10 10 10 10 10
DT2 <- cbind(data.table(loc=c("L2","L3"), product=c("P2","P1")), matrix(1:24,nrow=2,ncol=12))
setkey(DT2, loc, product)
loc product V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1: L2 P2 1 3 5 7 9 11 13 15 17 19 21 23
2: L3 P1 2 4 6 8 10 12 14 16 18 20 22 24
到目前为止,我最好的选择是以下内容。
DT1[DT2, 3:14 := as.data.table(DT1[DT2, 3:14, with=FALSE] + DT2[, 3:14, with=FALSE]), with=FALSE]
loc product V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
1: L1 P1 10 10 10 10 10 10 10 10 10 10 10 10
2: L2 P2 11 13 15 17 19 21 23 25 27 29 31 33
3: L3 P1 12 14 16 18 20 22 24 26 28 30 32 34
请注意,nrow和ncol以及loc和product条目都是根据源数据可变的。
如果DT2中的每一行与DT1中的一行匹配,则此方法有效,但否则会产生意外结果。 是否有更严谨/优雅的方法来表达RHS,以执行这个可变数量的列分配,同时涉及到DT1和DT2?
i.
前缀,你只是在从DT1
中累加列。 - eddi