Demean R data.table:列列表

时间:2015-05-03 17:07:00

标签: r data.table

我想按小组贬低整个console.dir(m)对象(或只是其中许多列的列表)。

到目前为止,这是我的方法:

data.table

给出了

setkey(myDt, groupid)
for (col in colnames(wagesOfFired)){
   myDt[, paste(col, 'demeaned', sep='.') := col - mean(col), with=FALSE]
}

这是一些示例数据。在这个简单的例子中,只有两列,但我通常有很多列,所以我想迭代列表

Error in col - mean(col) : non-numeric argument to binary operator

1 个答案:

答案 0 :(得分:5)

问题是col是一个字符串,因此无法计算col-mean(col)

myNames <- names(myDt)
myDt[,paste(myNames,"demeaned",sep="."):=
  lapply(.SD,function(x)x-mean(x)),
by=groupid,.SDcols=myNames]

评论:

  • 您不需要设置密钥。
  • 在一次操作中,因为反复使用[可能会很慢。
  • 您可以将myNames更改为列名的某个子集。