我一直在学习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解决方案怎么样?
答案 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