【问题标题】:Assigning values to a data.table when using dot-dot使用 dot-dot 时为 data.table 赋值
【发布时间】:2020-02-21 14:19:10
【问题描述】:

我想按名称从我的 data.table 中的多个列中减去一个向量。我使用 dot-dot 的方法,但我似乎无法理解为什么最后一个赋值不起作用,因为两个表达式在单独评估时都可以正常工作。我附上了一个可重现的示例,应该可以清楚地说明问题。

dt <- data.table("a_x" = rnorm(10),
           "b_x" = rnorm(10),
           "a_y" = rnorm(10),
           "b_y" = rnorm(10),
           "d" = rnorm(10)
           )

XIND <- names(dt) %like% "_x"

MAT <- matrix(dt[,d], nrow = dim(dt[,..XIND])[1], ncol = dim(dt[,..XIND])[2])
dt[,..XIND] <- dt[,..XIND] - MAT

【问题讨论】:

  • 你真的应该在 GitHub 上向 data.table 开发人员提出这个问题。

标签: r data.table


【解决方案1】:

这是另一个对我来说更惯用的选项:

dt <- data.table("a_x" = 1:10, "b_x" = 2:11, "d" = 1:10)
XIND <- grep("_x$", names(dt))
dt[, (XIND) := .SD - d, .SDcols=XIND]

【讨论】:

    【解决方案2】:

    我使用str_subset 作为解决方法,但是在我看来这并不理想。

    dt[,(str_subset(names(dt),"_x"))] <- dt[,..XIND] - MAT
    

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2013-01-20
      • 2022-01-13
      • 2020-03-26
      相关资源
      最近更新 更多