如何根据特定条件获取data.table列名?

Dmi*_*riy -3 parallel-processing r data.table

我有一个data.table对象resultList,其中包含名为的列"V1:V128"和一些行。我想获取那些满足条件的列的名称,例如

lapply(.SD, mean) < a
Run Code Online (Sandbox Code Playgroud)

我尝试这样做:

names(resultList[, lapply(.SD, mean) < 0])
Run Code Online (Sandbox Code Playgroud)

但我没有任何效果。什么代码实现这个?

第二个问题 - 是否可以使用parLapply代替lapplyfor data.table(例如,使用parLapply(cl, .SD, mean)代替lapply(.SD, mean))?

Kri*_*sen 5

要获取平均值小于某个特定值的列的名称,您可以执行以下操作:

dt = data.table(a = rep(1,10), b = rep(10,10))
colnames(dt)[colMeans(dt) < 10]
## [1] "a"
Run Code Online (Sandbox Code Playgroud)

或者更符合语言习惯的data.table方法是

colnames(dt)[dt[, lapply(.SD, mean) < 10]]
## [1] "a"
Run Code Online (Sandbox Code Playgroud)

另请参阅 data.table 的注意事项

  • 在数据表上使用带有边距 2 的“apply”的经验法则是不要这样做 (2认同)
  • 它会产生意想不到的后果。另外,我们永远不应该执行“apply(obj, 2,mean)”。有一个有效的函数可以实现这一点,“colMeans”。当我们这样做时,“apply(obj, 1,mean)”应该是“rowMeans”。 (2认同)