假设我有一个时间戳数据框,其中包含当时售出的相应门票数量。
Timestamp ticket_count
(time) (int)
1 2016-01-01 05:30:00 1
2 2016-01-01 05:32:00 1
3 2016-01-01 05:38:00 1
4 2016-01-01 05:46:00 1
5 2016-01-01 05:47:00 1
6 2016-01-01 06:07:00 1
7 2016-01-01 06:13:00 2
8 2016-01-01 06:21:00 1
9 2016-01-01 06:22:00 1
10 2016-01-01 06:25:00 1
我想知道如何计算所有门票在一定时间范围内售出的门票数量。例如,我想计算所有票后最多15分钟售出的票数。在这种情况下,第一行将有三张票,第二行将有四张票,依此类推。
理想情况下,我正在寻找 dplyr 解决方案,因为我想使用 group_by()
函数为多个商店执行此操作。但是,我在弄清楚如何为给定行固定每个时间戳,同时通过 dplyr 语法搜索所有时间戳时遇到了一些麻烦。
最佳答案
在current development version的 data.table
, v1.9.7, non-equi
联接已实现。假设你的 data.frame
叫做df
和 Timestamp
列是 POSIXct
输入:
require(data.table) # v1.9.7+
window = 15L # minutes
(counts = setDT(df)[.(t=Timestamp+window*60L), on=.(Timestamp<t),
.(counts=sum(ticket_count)), by=.EACHI]$counts)
# [1] 3 4 5 5 5 9 11 11 11 11
# add that as a column to original data.table by reference
df[, counts := counts]
对于 t
中的每一行, 所有行 df$Timestamp < that_row
被提取。和 by=.EACHI
指示表达式 sum(ticket_count)
为 t
中的每一行运行.这会给出您想要的结果。
希望这对您有所帮助。
关于r - 使用滚动时间间隔来计算 R 和 dplyr 中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017753/