删除R中长度(唯一)== 1的所有列

时间:2014-03-26 04:54:06

标签: r

你能帮我吗,请。我有一个data.frame:

  tes1 test2 test3 test4 test5 test6 test7 test8 test9
1    1     0     1     1     1     0     0     1     0
2    0     0     0     0     0     0     0     1     0
3    0     0     1     0     1     0     0     0     0
4    0     0     1     0     0     0     1     1     0
5    0     1     1     1     1     0     0     1     0

我想del test6并测试9(长度(唯一)== 1) 并保留所有姓氏。

感谢。

3 个答案:

答案 0 :(得分:5)

# Select columns meeting the condition
colSel <- sapply( dat, function(x) length(unique(x))==1 )
# Use that logical vector to drop those columns
dat[ , !colSel ]

您可以通过反转表达式并在线使用它而不是将其保存到选择器变量来在一行中完成:

dat[ , sapply( dat, function(x) length(unique(x))>1 ) ]

sapply在这里工作,因为data.frames只是列表,每个元素都是一列。

答案 1 :(得分:1)

调用您的数据框d,这是一个执行此操作的表达式:

d[,apply(d, 2, FUN= function(x) length(unique(x))) != 1]
  tes1 test2 test3 test4 test5 test7 test8
1    1     0     1     1     1     0     1
2    0     0     0     0     0     0     1
3    0     0     1     0     1     0     0
4    0     0     1     0     0     1     1
5    0     1     1     1     1     0     1

答案 2 :(得分:0)

X = cbind( x=1, y=rnorm(10), w=rnorm(10), z =2)
keep = apply(X,2,function(x) length(unique(x))!=1)
Y = X[,keep]