【问题标题】:Assign new variables when using .SD to apply function on multiple variables in data.table [duplicate]使用 .SD 对 data.table 中的多个变量应用函数时分配新变量 [重复]
【发布时间】:2018-10-21 08:17:45
【问题描述】:

我了解如何使用 .SD 对多个列执行操作;我只是不知道如何将这些新值分配给我的数据表中的新变量(不覆盖输入变量)

在本例中,我创建了三个以字符串“newvars”结尾的新变量。我将这些新变量合并回数据表。是否可以在没有合并的情况下创建新的变量?

mtcars <- data.table( mtcars )  
newvars <- mtcars[ , lapply( .SD , function( Z ) Z * mtcars[[  "wt" ]]) , .SDcols= c("hp","drat","gear")]   
colnames(   newvars ) <- paste( colnames( newvars) , "newvars", sep="_")
mtcars <- cbind( mtcars , newvars )

似乎应该有一种直接的方式来做到这一点。

如果我没有这么多专栏,我会一一列出来

mtcars[ ,   hp_new := hp*wt ]

谢谢。

【问题讨论】:

  • 等待在这种方法中我在哪里分配“newvars”?

标签: r data.table


【解决方案1】:

IIUC,您正在添加新列。惯用的方法是使用:=,如下所示,将列名的新字符向量放在括号()之前:=

library(data.table)
mtc <- data.table(mtcars)
cols <- c("hp", "drat", "gear")
mtc[, (paste0(cols, "_newvars")) := lapply(.SD, `*`, wt), .SDcols=cols]
mtc

此外,您不需要在j 中使用[[ 访问wt 列(请参阅?data.table 以了解j 的定义)

【讨论】:

  • 谢谢!并感谢您对 j 的提示
猜你喜欢
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
相关资源
最近更新 更多