在data.table中按条件删除列的最佳方法

时间:2018-01-20 05:39:41

标签: r

我一直在学习R中的data.table包,并试图预处理一些数据进行建模。

对于数据框,一个凸轮执行以下操作以删除变化很小的列和具有强相关性的列。

model_dat2 = final_model_dat[ , c(numeric_features)]

model_dat3 <- model_data2[,-nearZeroVar(model_data2)]

correlations <- cor(model_dat3)

highCorr <- caret::findCorrelation(correlations, cutoff=0.90, verbose=TRUE, names=FALSE)

model_dat4 <- model_dat3[, -highCorr]

我试图将这些常规步骤应用于data.table并且不那么直接。

model_dat2 = final_model_dat[ , c(numeric_features), with=FALSE]

model_dat3 = Filter(var, model_dat2)

correlations <- cor(model_dat3)

highCorr <- caret::findCorrelation(correlations, cutoff=0.90, verbose=TRUE, names=FALSE)

model_dat4 <- model_dat3[, (highCorr) := NULL]

这“有效”......但我想知道按条件删除列的最佳方法是什么。这个任务的data.table解决方案怎么样?

1 个答案:

答案 0 :(得分:1)

如果我们要使用time-generated上的nearZeroVar,请获取与data.table差异接近零的列名称,并删除nearZeroVar

setdiff

library(caret) library(data.table) data(BloodBrain) setDT(bbbDescr) model_dat3 <- bbbDescr[, setdiff(names(bbbDescr), nearZeroVar(bbbDescr, names = TRUE)), with = FALSE] correlations <- cor(model_dat3)

tidyverse