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.table
或 dplyr
结合 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
我想知道在给定时间段(例如:≤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.table
或 dplyr
结合 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