【问题标题】:Append date column to rolling sum calculation of time series in R将日期列附加到 R 中时间序列的滚动总和计算
【发布时间】:2020-11-25 18:40:12
【问题描述】:

假设我有以下时间序列数据,source

+-----------+---+
|   Date    | A |
+-----------+---+
| 31-Dec-15 | 1 |
| 31-Dec-16 | 2 |
| 31-Dec-17 | 3 |
| 31-Dec-18 | 4 |
| 31-Dec-19 | 5 |
+-----------+---+

我正在使用N = 2N = 3source 执行以下滚动计算。 R代码:

for(i in (nrow(source)-(N-1)):1){A[i] <- sum(source$A[i:(i+(N-1))])}
output = data.frame(A)
print(output)

如何将日期索引整合到上述代码中,以便

  1. N=2 输出结果在
+-----------+---+
|   Date    | A |
+-----------+---+
| 31-Dec-16 | 3 |
| 31-Dec-17 | 5 |
| 31-Dec-18 | 7 |
| 31-Dec-19 | 9 |
+-----------+---+
  1. N=3 输出结果

+-----------+----+
|   Date    | A  |
+-----------+----+
| 31-Dec-17 |  6 |
| 31-Dec-18 |  9 |
| 31-Dec-19 | 12 |
+-----------+----+

我当前的代码只输出A 列,没有Date 列。而且我必须在打印output 后手动附加Date 列。我的实际时间序列数据比这长得多,滚动计算更复杂,所以这是一个简化的例子。

【问题讨论】:

  • 你可以使用rollsum(df1$A, 3)
  • @akrun 我在for 代码部分中的实际滚动计算代码比上面示例中的更复杂。因此,我想找到一种方法来添加Date 列而不修改for 代码部分
  • 你不能用output &lt;- data.frame(Date = source$Date[N:nrow(source)], A = A)吗?

标签: r dataframe date time-series rolling-computation


【解决方案1】:

正式化@Alexlok 建议:

for(i in (nrow(source)-(N-1)):1){A[i] <- sum(source$A[i:(i+(N-1))])}
output = data.frame(Date = source$Date[N:nrow(source)],A = A)
print(output)

【讨论】:

    最近更新 更多