我经常需要从data.table中过滤出方差较低的列。列名事先不知道。
dt = data.table(mtcars)
# calculate standard deviation with arbitrary max value of 1:
mask = dt[,lapply(.SD, function(x) sd(x, na.rm = TRUE) > 1)]
# The columns with the FALSE values in row 1 need to be removed
mask.t = t(mask)
mask.t = which(mask.t)
dt[,mask.t,with=FALSE]
上述方法比较笨重。有没有更加优雅的方式来从数据表中过滤掉那些列统计值为TRUE的列呢?
dt[, names(mask)[unlist(mask)], with=FALSE]
可能是这样的吗?或者dt[, names(which(unlist(mask))), with=FALSE]
。 - Arun