排除R中方差为零的变量的最快方法

时间:2016-01-17 04:27:49

标签: r k-means

我正在使用一个非常庞大的.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)中排除变量的最快方法是什么?

2 个答案:

答案 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。