将数据表的子集替换为其他数据表

时间:2017-05-24 14:22:16

标签: r data.table

我对这个问题感到有些愚蠢,但我只想知道如何处理data.frame,但我还没有找到一个很好的方法在R中做到这一点。所有其他类似的问题似乎我想到的更复杂的方式。我只想将data.table的子集替换为另一个data.table,仅基于行索引并选择一些列。

MWE如下

x.df <- data.frame(a=c(1,2,3),
               b=c(2,NA,NA), 
               c=c(3,NA,NA))
x.dt <- data.table(x.df)
x.df.replace<- data.frame(b=c(10,11), c=c(22,21))
x.dt.replace<- data.table(x.df.replace)

这就像数据框架中的魅力

x.df[is.na(x.df$b),2:3]<-x.df.replace

另一方面,我想按名称调用列,我只知道如何单独替换每列,但不能共同替换

x.dt[is.na(b),]
x.dt[is.na(b),c:=x.dt.replace[,c]]
x.dt[is.na(b),b:=x.dt.replace[,b]]
x.dt[is.na(b), list(b,c)]<-x.dt.replace
x.dt[is.na(b), list(b,c):=x.dt.replace]

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但遇到这个问题却没有答案。上面的评论帮助我找到了解决问题的方法,因此我决定将其发布在这里。在data.table版本之间(我使用的是1.11.8版本)可能只是一个差异,因为这是一个相对较老的问题。

该解决方案使用()而不是.()list()来声明要替换的列名:

colunas <- c("b","c")
x.dt[is.na(b), (colunas) := x.dt.replace]

希望这很有用