R - 在给定时间段内超过行重复阈值

R - Exceeding a threshold of row repetitions in a given period of time

我想知道在给定时间段(例如:≤3 年)内,哪些 ID 至少重复了一定次数(例如:≥3)。 我以下面的 table 为例:

ID  Date
1   2001-01-03
2   2001-02-28
3   2001-06-13
4   2002-04-05
5   2002-09-12
1   2002-12-12
3   2003-05-05
3   2003-05-06
4   2003-05-07
1   2003-06-04
2   2006-12-29
3   2007-04-05
1   2007-04-08
4   2007-09-12
1   2008-12-12
2   2009-01-23
3   2009-01-30
2   2009-04-05
1   2009-12-08
2   2010-01-04
2   2010-05-07
4   2012-01-02
5   2013-03-03
6   2014-01-01

我想得到以下结果:

ID  Rep
1   TRUE
2   TRUE
3   TRUE
4   FALSE
5   FALSE
6   FALSE

如果ID在不到3年的时间里至少重复了3次,不管重复多少次,什么时候重复,我都想得到一个TRUE的结果。如果 ID 重复少于 3 次,或超过 3 次但从未少于 3 年,我希望得到 FALSE 结果。

我想这对你们中的许多人来说可能是一个相当简单的问题。不过,我将非常感谢您的帮助。

您可以使用 data.tabledplyr 结合 diff();计算小于 years(3) * 365.25 的差异数,乘以 ID。如果这达到或超过 num, return TRUE

yrs <- num <- 3

library(data.table)
setDT(data)[order(ID,Date)][,.("Rep" = sum(diff(Date)<(yrs*365.25))>=num),by="ID"]

# OR

library(dplyr)
data %>% 
  arrange(Date) %>% 
  group_by(ID) %>% 
  summarize(Rep = sum(diff(Date)<(yrs*365.25))>=num)

      ID    Rep
   <num> <lgcl>
1:     1   TRUE
2:     2   TRUE
3:     3   TRUE
4:     4  FALSE
5:     5  FALSE
6:     6  FALSE