data.table:使用矩阵更新data.table中的多个列

时间:2015-08-12 18:41:01

标签: r matrix data.table

如何使用矩阵中的值更新exec中的多个列。这是一个说明我面临的问题的MWE:

data.table

library(data.table) DT = data.table(expand.grid(1:3,1:3,1:3)) DF = expand.grid(1:3,1:3,1:3) mat = matrix(seq(0, 80), 27, 3) 世界中,我会使用这种语法:

data.frame

DF[,2:ncol(DF)] = mat[,2:ncol(DF)] #Data frame approach 语法的类似看法会产生多个警告,但输出非常奇怪。

data.table

这显然是错误的 - 因为警告表明矩阵实际上是扁平的。警告信息:

DT[,2:ncol(DF) := mat[,2:ncol(DF)], with=FALSE] #Data table approach

2 个答案:

答案 0 :(得分:8)

您需要将RHS转换为list,一种简单的方法是使用as.data.table

DT[, 2:ncol(DT) := as.data.table(mat[,2:ncol(DT)])]
此处不需要

with,因为LHS被推断为自动表示列号。

答案 1 :(得分:3)

分配到多个列时,应该在列表中收集列:

idx <- 2:ncol(DT)
DT[,idx] <- lapply(idx, function(col) mat[,col])

这种语法适用于data.frame。它在data.table中是非标准的(其中set:=是惯用的),但我认为仍然可以通过引用修改DT

惯用:=方法是:

DT[,(idx) := lapply(idx, function(col) mat[,col])]