我目前有以下数据框:
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
我正在尝试使用which
和unique
函数的组合来仅返回具有多于1个唯一值的列,但我不完全确定如何使用这些(或者可能是某些其他函数)返回列。任何帮助,将不胜感激。谢谢!
答案 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