如何识别R中具有重复值的列的名称

时间:2019-05-24 13:06:16

标签: r

数据框具有由重复值组成的列。 我们如何识别具有重复值和数量的姓氏。

数据集:

A  B  C
1  2  a
2  3  b
3  4  a
1  5  c

我需要类似

的输出

具有重复值的列是A(2)和C(2)

我尝试过plicated(),它返回一个向量。

3 个答案:

答案 0 :(得分:3)

我们可以使用sapply来按列循环查找duplicated元素并获取其中的sum

colSums(sapply(df, function(x) duplicated(x)|duplicated(x, fromLast = TRUE)))

#A B C 
#2 0 2 

如果只需要非零列,则可以

vals <- colSums(sapply(df, function(x) 
                duplicated(x)|duplicated(x, fromLast = TRUE)))
vals[vals!= 0]
#A C 
#2 2 

使用dplyr,我们可以对summarise_all做同样的事情

library(dplyr)
df %>%
  summarise_all(~sum(duplicated(.) | duplicated(., fromLast = TRUE))) %>%
  select_if(~. != 0)

#  A C
#1 2 2

答案 1 :(得分:1)

要测试一列中是否存在重复值,可以将唯一值的数量与该列中的值的数量进行比较:

D <- read.table(header=TRUE, stringsAsFactors = FALSE, text=
"A  B  C
1  2  a
2  3  b
3  4  a
1  5  c")
names(D)[sapply(D, function(x) length(unique(x)))!=nrow(D)]

names(D)[sapply(D, function(x) any(duplicated(x)))]

答案 2 :(得分:0)

我们可以遍历各列,并找到ExcelAddress _formatRangeAddress = new ExcelAddress("C2:C5"); var conditionalFormattingRule01 = workSheet.ConditionalFormatting.AddExpression(_formatRangeAddress); conditionalFormattingRule01.Formula = "($C3=In Progress)"; conditionalFormattingRule01.Style.Fill.PatternType = ExcelFillStyle.Solid; conditionalFormattingRule01.Style.Fill.BackgroundColor.Color = Color.Yellow; 的{​​{1}}重复项以标识列名

any

或者将是另一个table解决方案

names(df1)[sapply(df1, function(x) any(table(x) > 1))]
#[1] "A" "C"

或与base R

names(Filter(anyDuplicated, df1))
#[1] "A" "C"

数据

tidyverse