r - 如何根据一个因素的水平从数据框中删除列?

标签 r

我创建了一个数据框 dd:

dd <- data.frame(a = factor(c(1,1,1,0,1,1)),
             b = factor(c(1,1,1,1,1,1)),
             c = factor(c(0,0,0,0,1,1)),
             d = factor(c(0,0,0,0,0,0)),
             e = factor(c(0,0,0,NA,0,0)))

这给了你这个:

> dd
  a b c d    e
1 1 1 0 0    0
2 1 1 0 0    0
3 1 1 0 0    0
4 0 1 0 0 <NA>
5 1 1 1 0    0
6 1 1 1 0    0

我想创建第二个数据框,其中仅包含每个因素有多个级别的那些列。我试过这个:

dd2 <- dd[, sapply(dd, function(col) length(unique(col))) > 1]

这给出了这个:

> dd2
  a c    e
1 1 0    0
2 1 0    0
3 1 0    0
4 0 0 <NA>
5 1 1    0
6 1 1    0

如您所见,这有点奏效,但问题是缺少数据。为了得到我想要的东西,e 列也需要被删除。

有没有人对我如何解决这个问题或其他方法有任何建议?

非常感谢任何帮助。 非常感谢, 尼基

最佳答案

我们可以使用过滤器。我们可以检查每列的方差 (var)。如果列的 var 为 0,它将被强制为 FALSE,而所有其他列将为 TRUE。由于 'dd' 中的列是 factor,我们得到整数水平的方差。

Filter(var, dd)

如果有 NA 值,我们可以在 var 中使用参数 na.rm=TRUE

Filter(function(x) var(x, na.rm=TRUE), dd1)

但是,一般来说,最好使用 length(unique 路由,因为这也适用于 character 列。 使用 length(unique(,我们保留 unique 非 NA 元素的 length 的列 (na.omit) 大于 1。

Filter(function(x) length(unique(na.omit(x)))>1, dd)

关于r - 如何根据一个因素的水平从数据框中删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566471/

相关文章:

IE10 上的 R Shiny 页面

r - 在ggplot2中定位水平箱线图

R 系统函数总是返回错误 127

r - XGBOOST-多类预测。预测矩阵是类别概率的集合。如何执行混淆矩阵

graphics - 如何找到所有包含图形功能的R包?

r - 假设所有年份都是非闰年,将一年中的某一天转换为日期

r - 使用 Rcpp 的斐波那契数列的意外结果

r - 在 R 中制作这个无花果

r - 按组计算数据框中出现的连续月份

r - 如何在 r 中的 h2o.automl 排行榜中打印所有模型的可变重要性