如何计算每行中重复值的出现次数?

时间:2019-01-28 03:24:09

标签: r duplicates

我有一个数据框df,其中有一堆位置数据如下所示:

ID   ZIP1    ZIP2    ZIP3    ZIP4
1    98109   01720   98109   94118
2    94118   01720   01718   94109
3    01720   95872   95872   01720
4    01718   94109   94118   01720
5    94109   94109   95872   94109
6    94118   01720   94109   95872

我想返回在多个列中具有相同邮政编码的个人数量(即,#1的98109显示两次,但是#2的代码没有重复,依此类推),因此正确的值应为3个人。

我尝试过anyDuplicated(df$ZIP1, df$ZIP2, df$ZIP3, df$ZIP4),但它给我的值不正确。

如何通过多个步骤或一次立即计算获得正确的值?

2 个答案:

答案 0 :(得分:3)

我们可以逐行使用apply,找出是否有any重复项,并计算sum

sum(apply(df, 1, function(x) any(duplicated(x))))
#[1] 3

或与anyDuplicated

sum(apply(df, 1, anyDuplicated) > 0)
#[1] 3

另一个使用tidyverse

的选项
library(tidyverse)


df %>%
  gather(key, value, -ID) %>%
  group_by(ID) %>%
  summarise(dupe = any(duplicated(value))) %>%
  ungroup() %>%
  summarise(final = sum(dupe)) %>%
  pull(final)

#[1] 3

df %>%
  gather(key, value, -ID) %>%
  group_by(ID) %>%
  summarise(dupe = anyDuplicated(value)) %>%
  ungroup() %>%
  summarise(final = sum(dupe > 0)) %>%
  pull(final)

#[1] 3

答案 1 :(得分:0)

只需尝试使用R附带的table函数并转到table(df)。如果我正确理解,应该可以解决问题。

如果您想独立查看这些ZIP列的数量,则可以转到table(df$ZIP1),它会以表格格式显示重复的次数。