仅返回r中具有多于1个唯一值的列值

时间:2015-07-14 14:16:43

标签: r

我目前有以下数据框:

datnotformeanfill<-
  data.frame(b8=c(1,2,2,2,1,1),b7=rep(1,6),
             b6=c(6,2,3,3,6,3),b5=c(6,3,3,3,4,3),
             b4=c(rep(6,5),1),b3=rep(0,6),
             b2=rep(1,6),b1=c(2,2,2,2,1,1))

> datnotformeanfill
  b8 b7 b6 b5 b4 b3 b2 b1
1  1  1  6  6  6  0  1  2
2  2  1  2  3  6  0  1  2
3  2  1  3  3  6  0  1  2
4  2  1  3  3  6  0  1  2
5  1  1  6  4  6  0  1  1
6  1  1  3  3  1  0  1  1

我正在尝试使用whichunique函数的组合来仅返回具有多于1个唯一值的列,但我不完全确定如何使用这些(或者可能是某些其他函数)返回列。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:10)

我们可以将Lib与函数Filter一起使用。它将检查每列的方差。如果列只有一个唯一值,则方差将为“0”。这将被转换回逻辑'FALSE / TRUE'并用于对数据集进行子集化。

f = var

或者另一个选项是使用 Filter(var, datnotformeanfill) # b8 b6 b5 b4 b1 # 1 1 6 6 6 2 # 2 2 2 3 6 2 # 3 2 3 3 6 2 # 4 2 3 3 6 2 # 5 1 6 4 6 1 # 6 1 3 3 1 1 循环遍历列,并检查条件sapply length元素是否大于1.这将返回逻辑“TRUE / FALSE”向量也可以用于子集化。

unique

答案 1 :(得分:2)

一个整洁的解决方案:

library(dplyr)
datnotformeanfill %>%
   select_if(function(col) length(unique(col))>1)

  b8 b6 b5 b4 b1
1  1  6  6  6  2
2  2  2  3  6  2
3  2  3  3  6  2
4  2  3  3  6  2
5  1  6  4  6  1
6  1  3  3  1  1