首页 > 解决方案 > 检查数据框中的列是否具有相同的值

问题描述

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

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

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

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

标签: rdataframe

解决方案


我们可以使用applycolumnwise ( margin = 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

推荐阅读