小编EdT*_*TeD的帖子

对 data.table 进行子集化以按组获取一段时间内最近的 3 行或更多行

是否有更快的方法在组内对 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)

r data.table

1
推荐指数
1
解决办法
270
查看次数

标签 统计

data.table ×1

r ×1