我想知道如何制作一个新的变量来计算我在某些年份有多少ID重复项。例如,下面我想计算2014年之前该ID重复多少次。这样,在2015年,它将计算2013年和2014年的ID。
ID Term Year Repeats
122 L 2013 N/A
112 L 2013 N/A
002 L 2013 N/A
152 L 2013 N/A
124 L 2013 N/A
122 L 2014 1
102 L 2014 N/A
142 L 2014 N/A
152 L 2014 N/A
120 L 2014 N/A
198 L 2014 N/A
122 L 2015 2
012 L 2015 N/A
101 L 2015 N/A
092 L 2015 N/A
031 L 2015 N/A
答案 0 :(得分:2)
如果Year
按升序排列:
df$Repeats <- 0L
i <- which(duplicated(df$ID))
df$Repeats[i] <- with(df[i, ], unsplit(lapply(split(ID, ID), seq_along), ID))
df
# ID Term Year Repeats
#1 122 L 2013 0
#2 112 L 2013 0
#3 2 L 2013 0
#4 152 L 2013 0
#5 124 L 2013 0
#6 122 L 2014 1
#7 102 L 2014 0
#8 142 L 2014 0
#9 152 L 2014 1
#10 120 L 2014 0
#11 198 L 2014 0
#12 122 L 2015 2
#13 12 L 2015 0
#14 101 L 2015 0
#15 92 L 2015 0
#16 31 L 2015 0
答案 1 :(得分:1)
另一个基础R解决方案:
d$Repeats <- ave(d$ID, d$ID, FUN = function(x) seq_along(x)-1)
# or a bit cleaner (thx to @DavidArenburg):
d$Repeats <- with(d, ave(ID, ID, FUN = seq_along)) - 1
给出:
> d
ID Term Year Repeats
1 122 L 2013 0
2 112 L 2013 0
3 2 L 2013 0
4 152 L 2013 0
5 124 L 2013 0
6 122 L 2014 1
7 102 L 2014 0
8 142 L 2014 0
9 152 L 2014 1
10 120 L 2014 0
11 198 L 2014 0
12 122 L 2015 2
13 12 L 2015 0
14 101 L 2015 0
15 92 L 2015 0
16 31 L 2015 0
使用data.table
的解决方案:
library(data.table)
setDT(d, key = c('ID','Year'))
d[, Repeats := 0:(.N-1), by = ID]
给出:
> d
ID Term Year Repeats
1: 2 L 2013 0
2: 12 L 2015 0
3: 31 L 2015 0
4: 92 L 2015 0
5: 101 L 2015 0
6: 102 L 2014 0
7: 112 L 2013 0
8: 120 L 2014 0
9: 122 L 2013 0
10: 122 L 2014 1
11: 122 L 2015 2
12: 124 L 2013 0
13: 142 L 2014 0
14: 152 L 2013 0
15: 152 L 2014 1
16: 198 L 2014 0
或者,您可以使用rowid
开发版本中的data.table
函数:
d[, Repeats := rowid(ID)-1]
使用dplyr
:
library(dplyr)
d %>% group_by(ID) %>% mutate(Repeats = row_number()-1)
如果你想要NA
而不是零,你可以使用:
d[, Repeats := c(NA, 1:(.N-1)), by = ID]
将给出:
ID Term Year Repeats
1: 2 L 2013 NA
2: 12 L 2015 NA
3: 31 L 2015 NA
4: 92 L 2015 NA
5: 101 L 2015 NA
6: 102 L 2014 NA
7: 112 L 2013 NA
8: 120 L 2014 NA
9: 122 L 2013 NA
10: 122 L 2014 1
11: 122 L 2015 2
12: 124 L 2013 NA
13: 142 L 2014 NA
14: 152 L 2013 NA
15: 152 L 2014 1
16: 198 L 2014 NA