【发布时间】:2019-02-06 12:40:39
【问题描述】:
我有一个键控 data.table,我想从另一个具有相同键的表中添加行:
library(data.table)
key.cols <- c("ID", "Code")
set.seed(1)
DT1 = data.table(
ID = c("b","b","b","a","a","c"),
Code = LETTERS[seq(1,6)],
Number = runif(6)
);DT1
DT2 = data.table(
ID = c("a","a","c","b","b","b"),
Code = LETTERS[seq(4,9)],
Number = runif(6)
);DT2
我只想将DT2 中未出现在DT1 中的键添加到DT1 行,即rbind 相对补码:
https://en.wikipedia.org/wiki/Complement_(set_theory)#Relative_complement
我可以尝试使用setops,然后添加键,让非键列填充NA,然后加入它们:
DT1 <- rbind(DT1, fsetdiff(DT2[,(key.cols), with=FALSE], DT1[,(key.cols), with=FALSE]), fill=TRUE)
DT1[DT2, Number:=ifelse(is.na(Number), i.Number, Number), on = key.cols];DT1
有没有更简单的方法?
【问题讨论】:
-
过滤 DT2 和 rbind?
rbind(DT1, DT2[ (!paste(ID, Code) %in% paste(DT1$ID, DT1$Code)), ]) -
当然。但我必须弄清楚如何处理不同的列向量。使用粘贴可能会变得丑陋
-
可能重复/相关帖子? stackoverflow.com/questions/1299871/…
标签: r data.table rbind