我有一个数据框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)
,但它给我的值不正确。
如何通过多个步骤或一次立即计算获得正确的值?
答案 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)
,它会以表格格式显示重复的次数。