【问题标题】:data.table "sumproduct" style vector multiplicationdata.table "sumproduct" 样式向量乘法
【发布时间】:2015-08-21 17:49:03
【问题描述】:

在这个玩具示例中,我想将系数列表与每行的相应值“求和”,并将结果分配给新列。下面的代码适用于给定的记录,但是当我删除 i 参数时,它的行为对我来说是意外的。我可以在循环中执行此操作或应用,但似乎我缺少一种 data.table 方式。

DT <- data.table(mtcars)
vars <- c("mpg","cyl","wt")
coeffs <- c(2,3,4)
DT[1,Calc := sum(coeffs*DT[1,vars,with=FALSE])]  # row 1 is assigned 70.480
DT[,Calc := sum(coeffs*DT[,vars,with=FALSE])]  # all rows assigned 2830.416

【问题讨论】:

标签: r data.table


【解决方案1】:

使用矩阵乘法:

coeffs <- as.vector(c(2,3,4))
dt2 <- DT[,Calc := as.matrix(DT[,..vars])%*%coeffs]

【讨论】:

    【解决方案2】:

    这是另一种方式,但我猜它使用基于 apply(...) 的方法,所以这可能不是您要找的。​​p>

    DT[,Calc:=rowSums(mapply("*",DT[,vars,with=FALSE],coeffs))]
    DT[1:3]
    #     mpg cyl disp  hp drat    wt  qsec vs am gear carb  Calc
    # 1: 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 70.48
    # 2: 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 71.50
    # 3: 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 66.88
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-16
      • 2020-10-29
      • 2013-04-04
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多