是否有更快的方法在组内对 data.table 进行子集化,保留 2 年内发生的最近 3 个或更多日期?
我有一组包含分组列和日期列的数据,我需要保留 2 年内最近的 3 个或更多日期。
我编写了一个函数,它接受一个对象的 data.table 并使用 for 循环来计算 date[i] - 日期,然后在对行进行子集化之前,如果一年内至少有 3 个日期发生,则中断循环。然后将该函数应用于按升序分组和按降序排列日期的数据。它可以工作,但需要相当长的时间来运行。
# Loading packages --------------------------------------------------------
library(data.table)
library(lubridate)
# Generating test data ----------------------------------------------------
test.dt <- data.table(grouping = c(rep(1, times = 17),
rep(2, times = 30),
rep(3, times = 7),
rep(4, times = 9),
rep(5, times = 8)),
date = c(sample(seq(dmy('28/8/2007'), dmy('3/10/2017'),
by = 'day'), 17),
sample(seq(dmy('7/5/2007'), dmy('19/4/2016'),
by = 'day'), 30),
sample(seq(dmy('28/12/2011'), dmy('3/10/2013'),
by = 'day'), 7),
sample(seq(dmy('21/12/2007'), dmy('11/11/2010'),
by …Run Code Online (Sandbox Code Playgroud)