如何删除R中没有多个不同观察值的所有变量?

时间:2013-05-06 17:55:54

标签: r

我有一个包含多个变量的数据集,这些变量只有一个独特的观察结果(例如,对于数据集中的每个观察,变量 Language 等于“English”)。我试图编写一个函数,自动查找这种性质的任何变量,并将其从数据帧中删除。以下代码有效,但我确信有一种更有效的方法。有什么想法吗?

test.df <- data.frame(var1=rep("a",5), var2=c(rep("a",3),rep("b",2)),
                      var3=1:5, var4=rep(0,5)) 

remove.repeat.vars <- function(data) {
  one.level.factors <- sapply(data, function(x) ifelse(length(unique(x)) < 2, 1, 0))
  one.level.factors <- names(one.level.factors[which(one.level.factors == 1)])
  return (data[,-which(names(data) %in% one.level.factors)])
}

 remove.repeat.vars(test.df)

1 个答案:

答案 0 :(得分:4)

一个班轮:

test.df[, sapply(test.df, function(x) length(unique(x)) > 1)]

这就是它起作用的原因。 R支持两种不同的索引向量的方法:索引向量(任意长度)或布尔向量。比较:

> x <- 6:10
> x[c(1,3,5)]
[1]  6  8 10
> x[c(TRUE, FALSE, FALSE, TRUE, FALSE)]
[1] 6 9

第二个问题是x[x>7]之类的问题。