1

我有以下数据框:

df = 
id Year Value
1  1    3
1  2    4
2  1    6
2  2    2
2  2    3
3  1    7
3  2    3

我想计算个人身份证重复年份的次数。

期望的结果:

1

Id 2 有两次第 2 年,这就是1结果

到目前为止,我已经尝试过:

library("dplyr")
df %>% group_by(id, Year) %>% summarize(count=n())

但我无法得到一个带有计数的数字

干杯

4

3 回答 3

3

我们可以使用table并创建每个观察计数,id然后year计算出现超过 1 次的观察计数。

sum(table(df$id, df$Year) > 1)
#[1] 1

只是为了完成,如果我们想在dplyr

library(dplyr)
df %>% 
  group_by(id, Year) %>% 
  summarise(count= n()) %>%
  ungroup() %>%
  summarise(new_count = sum(count > 1)) 

#   new_count
#      <int>
#1         1
于 2018-07-12T09:11:45.080 回答
1

纯娱乐:

data.table 解决方案:

数据:

dt<-
fread("id Year Value
1  1    3
1  2    4
2  1    6
2  2    2
2  2    3
3  1    7
3  2    3")

代码:

dt[,.N>1,by=c("id","Year")]$V1 %>% sum
于 2018-07-12T09:33:41.510 回答
1

一个(快速)替代方案:

sum(sapply(split(df$Year, df$id), function(x) any(duplicated(x))))

在哪里:

df <- data.frame(
  id = c(1L, 1L, 2L, 2L, 2L, 3L, 3L), 
  Year = c(1L, 2L, 1L, 2L, 2L, 1L, 2L), 
  Value = c(3L, 4L, 6L, 2L, 3L, 7L, 3L)
)
于 2018-07-12T10:04:21.583 回答