r - 使用滚动时间间隔来计算 R 和 dplyr 中的行数

标签 r dplyr

假设我有一个时间戳数据框,其中包含当时售出的相应门票数量。

         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 versiondata.table , v1.9.7, non-equi联接已实现。假设你的 data.frame叫做dfTimestamp列是 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/

相关文章:

r - 如何在Stan中运行robit模型?

r - 使用 purrr::map 将多个数据帧写入 csv 文件

r - 创建一列包含矩阵的 data.frames

r - 获取第一个非 0 值或最后一个 0 值(如果仅此而已)

r - 大型数据集中的快速子集/查找/过滤器

r - 结合两个不相等的数据集来计算比例

r - 如何让 R 停止接受列名的部分匹配?

r - 将长度不均匀的列表向量转换为矩阵

r - 使用OR使用dplyr过滤数据帧的更好方法?

r - r中的选择性缩放函数使用不同的数据框进行缩放