数据框具有由重复值组成的列。 我们如何识别具有重复值和数量的姓氏。
数据集:
A B C
1 2 a
2 3 b
3 4 a
1 5 c
我需要类似
的输出具有重复值的列是A(2)和C(2)
我尝试过plicated(),它返回一个向量。
答案 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