我正在使用一个非常庞大的.csv数据集进行评估,但我有这个错误需要解决。
Warning in preProcess.default(data, method = c("center", "scale")) :
These variables have zero variances: num_outbound_cmds, is_host_login
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
在数据集whose variance is zero (0)
中排除变量的最快方法是什么?
答案 0 :(得分:3)
R包caret
具有函数nearZeroVar
,可以很好地识别矩阵或数据框中具有零或接近零方差的列。它将索引作为向量返回,您可以使用它来删除这些列。
> df <- data.frame(a=1:5, b=sample(1:5), c=rep(1,5))
> df
a b c
1 1 4 1
2 2 2 1
3 3 1 1
4 4 5 1
5 5 3 1
> nearZeroVar(df)
[1] 3
> df[,-nearZeroVar(df)]
a b
1 1 4
2 2 2
3 3 1
4 4 5
5 5 3
答案 1 :(得分:2)
使用@ Dthal的示例,base R
选项将使用Filter
Filter(var, df)
# a b
#1 1 4
#2 2 2
#3 3 1
#4 4 5
#5 5 3
上述方法的工作原理是将方差0转换为FALSE,将所有其他值转换为TRUE,将Filter
仅转换为TRUE。