【问题标题】:Calculate a Rolling Sum of Count in R计算 R 中的滚动总和
【发布时间】:2019-11-05 17:13:32
【问题描述】:

希望计算 R 中计数的滚动总和。我查看了这个 SO 线程:

R dplyr rolling sum

和其他人。

library(tidyverse)
library(RcppRoll)

client <- c('a','a','b','b','c','c')
count <- c(1,2,3,5,6,4)
date <- c('2018-01-31','2018-02-28','2018-01-31','2018-02-28','2018-01- 
31','2018-02-28')

df <- data.frame(client, count, date)

rolling<- df %>%
arrange(client, date) %>%
group_by(client, date ) %>%
mutate(roll_sum = rollapplyr(count, 12, sum, partial=T))

有人能指出我做错了什么,以便我纠正吗?此示例中的 roll_sum 仅等于原始计数。我想创建组的滚动总和。

更新以显示超过 12 个月数据的样本:

library(tidyverse)
library(RcppRoll)

client <- c('a')
count <- c(1,2,3,5,6,4,4,8,6,9,10,12,13)
date <- c('2018-01-31','2018-02-28','2018-03-31','2018-04-30','2018-05- 
31','2018-06-30', '2018-07-31','2018-08-31','2018-09-30','2018-10-31','2018- 
11-30','2018-12-31', '2019-01-31')

df <- data.frame(client, count, date)

rolling<- df %>%
arrange(client, date) %>%
group_by(client) %>%
mutate(roll_sum = rollapplyr(count, 12, sum, partial=T))

更新以显示所需的输出:

Client     Period         Count    12 Month Rolling Sum
a          2018-01-31        1     1
a          2018-02-28        2     3
a          2018-03-31        3     6
a          2018-04-30        4     10
a          2018-05-31        5     15
a          2018-06-30        6     21 
a          2018-07-31        7     28
a          2018-08-31        8     36
a          2018-09-30        9     45
a          2018-10-31        10    55
a          2018-11-30        11    66
a          2018-12-31        12    78
a          2019-01-31         5    82

请注意,2019 年 1 月 31 日的行开始了一个新的 12 个月期间。每个月之后也应该 在此先感谢

【问题讨论】:

  • 如果您想跨日期获取客户的滚动总和,那么我认为您希望将 date 从您的呼叫中删除到 group_by(),所以只需 group_by(client)
  • 这确实解决了问题。不过,在我更大的数据集中,我有超过 12 个月的时间。创建样本时我没有考虑到这一点。我想查看每个月滚动的 12 个月摘要。我目前的解决方案不断总结。查看更新的问题
  • 我无法让它工作 ...这对我们没有帮助。请描述错误和/或不良结果。用数据更好地向我们展示我们想要的结果。
  • 谢谢,我已经用所需的输出更新了问题

标签: r dplyr


【解决方案1】:

对于最后一行的rollapplyr函数,你可以试试zoo::rollapplyr

df %>%
  arrange(client, date) %>%
  group_by(client) %>%
  mutate(roll_sum = zoo::rollapplyr(count, 12, sum, partial=TRUE))

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2017-11-13
    • 2019-11-15
    相关资源
    最近更新 更多