【发布时间】:2021-03-10 08:42:51
【问题描述】:
我的问题很简单,但我仍然找不到不需要我创建很多不必要的填充行的简单解决方案。
鉴于此数据集:
df <- structure(
list(
date = c(
2015.16666666667,
2015.33333333333,
2015.83333333333,
2016,
2016.08333333333,
2016.25,
2016.33333333333,
2016.41666666667,
2016.5,
2016.66666666667
),
Age = c(
1,
2.99999999999818,
8.99999999999818,
10.9999999999991,
11.9999999999982,
13.9999999999991,
14.9999999999982,
16,
16.9999999999991,
19
),
year = c(
2015L,
2015L,
2015L,
2015L,
2016L,
2016L,
2016L,
2016L,
2016L,
2016L
),
month = c(2L, 4L,
10L, 12L, 1L, 3L, 4L, 5L, 6L, 8L),
r_Total = c(
481.02,
666.36,
851.7,
1633.74,
2155.1,
2613.74,
3105.44,
4429.52,
5170.88,
5170.88
)
),
row.names = c(NA,-10L),
class = c("tbl_df", "tbl", "data.frame")
)
我想计算过去 12 个月的移动平均值 r_total。但是,数据在 r_total 为 0 的月份中没有行,因此我通常的解决方案不起作用:
library(dplyr)
df %>%
mutate(cummulative_sum = cumsum(r_total), moving_average = (cummulative_sum-lag(cummulative_sum,12) )/12)
这会计算最近 12 个值的移动平均值,但关键不是过去 12 个月!
lag() 我在这里使用的只是查看有序向量并识别第 -12 位的值。但是,我需要一个函数,它可以从 Age == Age-12 (年龄是自该值开始以来的几个月)为我提供值。
那我该怎么办?
【问题讨论】: