簡體   English   中英

data.table:使用矩陣更新data.table中的多個列

[英]data.table: Update multiple columns in a data.table with a matrix

如何使用矩陣中的值更新data.table多個列。 這是一個說明我面臨的問題的MWE:

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

這顯然是錯誤的 - 因為警告表明矩陣實際上是扁平的。 警告信息:

1: In `[.data.table`(DT, , `:=`(2:ncol(DF), mat[, 2:ncol(DF)]), with = FALSE) :
  2 column matrix RHS of := will be treated as one vector

您需要將RHS轉換為list ,一種簡單的方法是使用as.data.table

DT[, 2:ncol(DT) := as.data.table(mat[,2:ncol(DT)])]

with此沒有必要,因為LHS被推斷為自動意味着列數。

分配給多個列時,應該在列表中收集列:

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])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM