我目前有以下数据框:
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
Run Code Online (Sandbox Code Playgroud)
我试图使用which和unique函数的组合来仅返回具有多于1个唯一值的列,但我不完全确定如何使用这些(或者可能是其他一些函数)来返回列.任何帮助,将不胜感激.谢谢!
akr*_*run 10
我们可以使用Filter功能f = var.它将检查每列的方差.如果列只有一个唯一值,则方差将为"0".这将被转换回逻辑'FALSE/TRUE'并用于对数据集进行子集化.
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
Run Code Online (Sandbox Code Playgroud)
或者另一种选择是通过用列循环sapply并检查条件是否length的unique元素大于1.这将返回一个逻辑"真/假",可以被用于子集,以及载体.
datnotformeanfill[sapply(datnotformeanfill, function(x) length(unique(x))>1)]
Run Code Online (Sandbox Code Playgroud)