小编jea*_*ain的帖子

优雅地更新多个data.table列

我正在尝试做一个简单的事情,按照它们的平均值划分40列data.table.我无法提供实际数据(并非所有列都是数字,我有> 8M行),但这是一个例子:

library(data.table)   

dt <- data.table(matrix(sample(1:100,4000,T),ncol=40))
colmeans <- colMeans(dt)
Run Code Online (Sandbox Code Playgroud)

接下来我以为我会这样做:

for (col in names(colmeans)) dt[,col:=dt[,col]/colmeans[col]]   
Run Code Online (Sandbox Code Playgroud)

但是这会返回一个错误,因为dt[,col]要求不引用列名.使用as.name(col)不削减它.现在,

res <- t(t(dt[,1:40,with=F]/colmeans))
Run Code Online (Sandbox Code Playgroud)

包含扩展结果,但我无法将其插回到data.table中,如

dt[,1:40] <- res
Run Code Online (Sandbox Code Playgroud)

不起作用,也不起作用dt[,1:40:=res, with=F].

以下作品,但我发现它很难看:

for (i in seq_along(colmeans)) dt[,i:=dt[,i,with=F]/colmeans[i],with=F]
Run Code Online (Sandbox Code Playgroud)

当然,我也可以重新通过调用一个新的data.table data.table()res和其他非数值列我data.table有,但不是自己的东西更有效率?

r data.table

10
推荐指数
2
解决办法
8514
查看次数

标签 统计

data.table ×1

r ×1