首页 > 解决方案 > 如何计算每行中重复值或值的出现次数?

问题描述

我有一个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)了,但它没有给我正确的价值。

如何获得正确的值,无论是在多个步骤中还是在一次立即计算中?

标签: rduplicates

解决方案


我们可以使用applyrow-wise 并找出是否有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

推荐阅读