这是this one的后续问题。我要检查的是数据框中的任何列是否所有行都包含相同的值(数字或字符串)。例如,
sample <- data.frame(col1=c(1, 1, 1), col2=c("a", "a", "a"), col3=c(12, 15, 22))
目的是检查数据框中的每一列,以查看哪一列的所有行的条目都不相同。这该怎么做?特别是,既有数字,也有字符串。
我的预期输出将是一个包含列号的向量,该列号具有不同的条目。
答案 0 :(得分:6)
我们可以按列使用apply
(margin = 2
),并在该列中计算唯一值,然后选择唯一值数量不等于1的列。
which(apply(sample, 2, function(x) length(unique(x))) != 1)
#col3
# 3
也可以使用sapply
或lapply
调用来完成相同的代码
which(sapply(sample, function(x) length(unique(x))) != 1)
#col3
# 3
dplyr
版本可能是
library(dplyr)
sample %>%
summarise_all(funs(n_distinct(.))) %>%
select_if(. != 1)
# col3
#1 3
答案 1 :(得分:0)
我们可以使用Filter
names(Filter(function(x) length(unique(x)) != 1, sample))
#[1] "col3"