我有一个包含多个变量的数据集,这些变量只有一个独特的观察结果(例如,对于数据集中的每个观察,变量 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)
答案 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]
之类的问题。