2

我有一个包含几个变量的数据集,这些变量只有一个唯一的观察值(例如,对于数据集中的每个观察值,变量语言等于“英语”)。我试图编写一个函数来自动查找这种性质的任何变量并将其从数据框中删除。以下代码有效,但我确信有一种更有效的方法。有任何想法吗?

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)
4

1 回答 1

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]工作。

于 2013-05-06T18:00:17.737 回答