【发布时间】:2016-12-04 15:02:42
【问题描述】:
假设我有一个如下所示的 data.table:
dt = data.table(group = c(1,1,1,2,2,2,3,3,3),time = c("2016-03-09T08:31:00-05:00","2016-03-08T11:31:00-05:00","2016-03-06T08:31:00-05:00",
"2016-04-04T23:28:00-04:00","2016-04-10T23:28:00-04:00","2016-04-09T23:28:00-04:00",
"2016-05-11T19:52:00-04:00","2016-05-10T20:52:00-04:00","2016-04-11T19:52:00-04:00"))
dt
group time
1: 1 2016-03-09T08:31:00-05:00
2: 1 2016-03-08T11:31:00-05:00
3: 1 2016-03-06T08:31:00-05:00
4: 2 2016-04-04T23:28:00-04:00
5: 2 2016-04-10T23:28:00-04:00
6: 2 2016-04-09T23:28:00-04:00
7: 3 2016-05-11T19:52:00-04:00
8: 3 2016-05-10T20:52:00-04:00
9: 3 2016-04-11T19:52:00-04:00
对于此 data.table 中的每个组,我只想保留最近日期 24 小时内的观察结果。我为此制定了一个令人讨厌的解决方案,但它并没有我在大型数据集上所需的速度那么快。
library(lubridate)
set(dt,j = "time",value = ymd_hms(dt[["time"]]))
dt[,.(mostRecent = max(time),time),by = group][
time > (mostRecent - days(1)),.(group,time)]
group time
1: 1 2016-03-09 13:31:00
2: 1 2016-03-08 16:31:00
3: 2 2016-04-11 03:28:00
4: 3 2016-05-11 23:52:00
5: 3 2016-05-11 00:52:00
有没有人有关于如何更优雅/更快地完成的提示?
【问题讨论】:
标签: r data.table data-manipulation