【发布时间】:2016-01-24 19:12:02
【问题描述】:
我想根据在另一个表的特定列中找到的值更新表的值。即
tb1<-data.table(w=c('xray','yankee','zulu','alpha','bravo','charlie',
'xray','yankee','zulu','alpha','bravo','charlie'),
x=c('alpha','bravo','charlie','xray','yankee','zulu',
'xray','yankee','zulu','alpha','bravo','charlie'),
y=c('zulu','yankee','xray','charlie','bravo','alpha'))
tb2<-data.table(z= c('alpha','bravo','charlie'),
z2=c('zalpha','zbravo','zcharlie'))
在 tb1 的“w”列中,未出现在 tb2 的“z”列中的值应替换为“NONE”。这段代码实际上是为这个短表工作的。
tb1[,"w":=lapply(tb1$w,function(u){ifelse((u %in% tb2$z),u,"NONE")})]
但是,实际表有超过 200 万条记录,并且上述指令非常慢(在停止之前 > 20 分钟)。最终,我需要替换 tb1 的列“w”、“x”和“y”中不在 tb2$z 中的所有值。完成此操作的正确“data.table”方法是什么?我尝试了子集它假设在进行替换之前对值进行分组会更有效。我与 .SD 一起使用的任何组合都没有给我正确的答案。感谢您的帮助。
【问题讨论】:
标签: r data.table subset