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

cos*_*k08 4 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
Run Code Online (Sandbox Code Playgroud)

我试图使用whichunique函数的组合来仅返回具有多于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并检查条件是否lengthunique元素大于1.这将返回一个逻辑"真/假",可以被用于子集,以及载体.

datnotformeanfill[sapply(datnotformeanfill, function(x) length(unique(x))>1)]
Run Code Online (Sandbox Code Playgroud)

  • `var`的东西是巧妙的.永远不会想到它.不知道它是否快速. (2认同)
  • @akrun哦,哇,这是非常感谢! (2认同)