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