R 如何计算每行中重复或出现的值的数量?

R 如何计算每行中重复或出现的值的数量?,r,duplicates,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 0

我有一个数据帧
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个人

我尝试了
任何重复的(df$ZIP1、df$ZIP2、df$ZIP3、df$ZIP4)
但没有给出正确的值


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

我们可以使用
apply
行方式,找出是否有
任何重复项,并计算
总和

sum(apply(df, 1, function(x) any(duplicated(x))))
#[1] 3
或使用任何重复的

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


只需尝试使用R和go随附的
table
功能
table(df)
。如果我理解正确的话,这应该可以解决问题

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

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

#[1] 3