【问题标题】:Replace subset of data table with other data table用其他数据表替换数据表的子集
【发布时间】:2017-05-24 14:22:16
【问题描述】:

我觉得这个问题有点傻,但我只想做一些我知道如何处理 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]

【问题讨论】:

  • x 中的 x[is.na(b),c:=x1[,c]] 对象是什么?
  • 那么x.dt[is.na(b), 2:3 := x.dt.replace] 有什么问题? (这是基本 R 代码的准确表述)
  • 没什么,虽然我希望使用逐字列名,这就是我尝试list(b,c)的原因
  • 你说“这就像数据框架中的魅力”,现在你说这不是你想要的。无论哪种方式,您都可以使用 x.dt[is.na(b), c("b", "c") := x.dt.replace] (这也与使用普通 data.frame 几乎相同 - 除了 :=&lt;- 部分)。
  • 谢谢您可以将此作为答案发布,我会接受。我认为您不应该使用 c("b","c") 或字符向量来子集 data.table 中的列。那改变了吗?这就是我尝试list(b,c) 的原因。我只是很困惑为什么x.dt[is.na(b), c("b","c"):= x.dt.replace] ] 有效而x.dt[is.na(b), list(b,c):= x.dt.replace] ] 没有:=x.dt.replace 的输出是一样的

标签: r data.table


【解决方案1】:

我遇到了同样的问题,我遇到了这个问题,没有答案。上面的 cmets 帮助我找到了解决问题的方法,所以我决定在这里发布。可能只是data.table 版本之间的区别(我使用的是 1.11.8 版本),因为这是一个比较老的问题。

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

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

希望对你有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多