检查数据框中的列是否具有相同的值

时间:2018-08-27 01:23:02

标签: r dataframe

这是this one的后续问题。我要检查的是数据框中的任何列是否所有行都包含相同的值(数字或字符串)。例如,

sample <- data.frame(col1=c(1, 1, 1), col2=c("a", "a", "a"), col3=c(12, 15, 22))

目的是检查数据框中的每一列,以查看哪一列的所有行的条目都不相同。这该怎么做?特别是,既有数字,也有字符串。

我的预期输出将是一个包含列号的向量,该列号具有不同的条目。

2 个答案:

答案 0 :(得分:6)

我们可以按列使用applymargin = 2),并在该列中计算唯一值,然后选择唯一值数量不等于1的列。

which(apply(sample, 2, function(x) length(unique(x))) != 1)

#col3 
#   3 

也可以使用sapplylapply调用来完成相同的代码

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"