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

LaT*_*Fan 1 r dataframe

这是一个后续问题这一个.我想检查的是数据框中的任何列是否包含所有行的相同值(数字或字符串).例如,

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

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

我的预期输出将是包含具有不相同条目的列号的向量.

Ron*_*hah 6

我们可以使用applycolumnwise(margin = 2)并计算列中的唯一值,并选择具有不等于1的唯一值数的列.

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

#col3 
#   3 
Run Code Online (Sandbox Code Playgroud)

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

which(sapply(sample, function(x) length(unique(x))) != 1)
#col3 
#   3 
Run Code Online (Sandbox Code Playgroud)

一个dplyr版本可能是

library(dplyr)
sample %>%
  summarise_all(funs(n_distinct(.))) %>%
  select_if(. != 1)

#  col3
#1    3
Run Code Online (Sandbox Code Playgroud)