我有两个具有相同结构的data.table。两个关键列后跟多个数据列。数据列的数量可能会有所不同。 我想将第二个data.table中的值添加到第一个data.table中的相应行/列。
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
到目前为止,我最好的选择是以下
SELECT *
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'USER';
请注意,nrow和ncol以及loc和product条目都是可变的,具体取决于源数据。
如果DT2中的每一行都与DT1中的一行匹配,则此方法有效,否则会产生意外结果。 是否有更严格/更优雅的方式来表达RHS以参考DT1和DT2进行这种可变数量的列分配?
答案 0 :(得分:6)
怎么样:
<style name="AppTheme" parent="android:Theme.Light">
答案 1 :(得分:0)
一种可能性是进行连接,并且在有重复列的位置,您可以创建表达式以使用这些名称来执行总和
DT3 <- DT2[ DT1 ]
dup <- names(DT3)[grep("[i.]", names(DT3))]
dup2 <- gsub("[i.]", "", dup)
expr <- paste0("`:=`(", paste0(dup2, "=", dup2, "+", dup, collapse = ","), ")")
## set NA to 0
for(j in names(DT3)) set(DT3, which(is.na(DT3[[j]])), j, 0)
DT3[, eval(parse(text = expr))][, c("loc", "product", dup2), with=F]
# 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