window 大小的滚动统计数据
Rolling statistics with varying window size
我正在管理股票每日数据集。这是示例代码:
A <- cumsum(rnorm(200))
Date <- Sys.Date() + cumsum(sample(1:5, 200, replace = TRUE)) # unequaly spaced time series
data<-data.frame(Date,A)
data<-data%>%
mutate(Year_Month=as.yearmon(Date))
我的 objective 是计算一个新的月度变量 B。它是根据以月结束的 12 个月期间的每日数据 A 计算的平均值。 例如,2021-07-03属于2021年7月,我需要设置前12个月的window,从2020年7月到2021年6月,我使用所有每日计算平均值data A within this window. 因此,对于[2021-07-03,2021-07-31],结果B是一样的。
我尝试使用 rollapply
和 runner
函数,但困难在于 window 不是常数,因为每个月的天数不是常数。我想在 dplyr 上下文中实现这个目标。
预期的示例输出如下所示:
Date Year_Month A B
2021-07-03 July 2021 3.3 2.3
2021-07-08 July 2021 1.5 2.3
2021-07-11 July 2021 4.3 2.3
...
2021-08-04 Aug 2021 2.2 3.2
2021-08-07 Aug 2021 5.7 3.2
2021-08-09 Aug 2021 4.2 3.2
我的新数据集是一个包含 348 个月观测值的纯时间序列:
Date A
2021-07-01 3.1
2021-08-01 4.5
2021-09-01 5.5
...
2021-10-01 4.4
2021-11-01 2.4
2021-12-01 5.5
我通过 AR(2) 模型滚动 window 60 个月计算冲击,结束于 month.The 第 n+1 个月的冲击是系列实际值之间的差异及其使用过去 60 个月估计的斜率系数的预测值(残差)。
我正在编写一个函数并在滑块内调用它。
AR_2<-function(x){
arima(x,order=c(1,0,0))$residuals
}
MILIQ_unexpected<-MILIQ%>%
mutate(Shock= slide_index_dbl(A, Date, AR_2, .before = months(60), .after = months(-1), .complete = T))
我收到以下错误:
Problem with `mutate()` input `B`.
x In iteration 61, the result of `.f` had size 59, not 1.
i Input `B` is `slide_index_dbl(...)`.
Backtrace:
1. `%>%`(...)
11. slider:::stop_not_all_size_one(61L, 59L)
12. slider:::glubort("In iteration {iteration}, the result of `.f` had size {size}, not 1.")
这些替代方案只使用您似乎已经在使用的包,除了 (1) 也使用 sqldf。 (2) 可以通过使用 transform 而不是 mutate 并进行相应的更改来轻松修改以删除 dplyr。
当使用可变 windows 长度时,通常还希望显示对每个长度有贡献的点数,因此我们已将其添加到下面的每个解决方案中。如果您不需要,那么解决方案可能会稍微短一些。
请注意,Year_Month - 1/12
是之前的 year/month,Year_Month - 1
是一年前的 year/month。
1) SQL 这可以用指定条件的自连接来表示。 dplyr joins 不支持这个,只使用 sql 可以更优雅地表达这个。
library(dplyr)
library(zoo)
library(sqldf)
res <- data %>%
do( sqldf("select a.*, avg(b.A) B, count(b.A) n
from [.] a
left join [.] b on b.Year_Month between a.Year_Month - 1. and a.Year_Month - 1./12.
group by a.rowid") )
tail(res)
## Date A Year_Month B n
## 195 2023-02-03 -1.26409378 Feb 2023 1.772121 119
## 196 2023-02-05 0.73311960 Feb 2023 1.772121 119
## 197 2023-02-08 1.33382843 Feb 2023 1.772121 119
## 198 2023-02-09 0.08255706 Feb 2023 1.772121 119
## 199 2023-02-10 -0.52860885 Feb 2023 1.772121 119
## 200 2023-02-13 -1.71408894 Feb 2023 1.772121 119
为了检查,我们显示每个 year/month:
的起始行
data[!duplicated(data$Year_Month), ]
## Date A Year_Month
## 1 2021-07-02 -0.56047565 Jul 2021
## 12 2021-08-05 2.33015207 Aug 2021
## 21 2021-09-05 1.76465234 Sep 2021
## 34 2021-10-02 0.49153921 Oct 2021
## 44 2021-11-02 1.80826818 Nov 2021
## 54 2021-12-02 3.27068104 Dec 2021
## 63 2022-01-01 3.48114606 Jan 2022
## 75 2022-02-02 1.97620336 Feb 2022
## 84 2022-03-02 2.20345723 Mar 2022
## 93 2022-04-01 6.45028172 Apr 2022
## 104 2022-05-03 7.99283353 May 2022
## 115 2022-06-01 3.96069081 Jun 2022
## 124 2022-07-04 0.27650357 Jul 2022
## 133 2022-08-01 2.68588621 Aug 2022
## 144 2022-09-01 -1.56122775 Sep 2022
## 154 2022-10-01 -2.77382373 Oct 2022
## 164 2022-11-01 -0.39630922 Nov 2022
## 174 2022-12-02 2.46797357 Dec 2022
## 185 2023-01-01 -0.29451527 Jan 2023
## 194 2023-02-02 0.04670775 Feb 2023
所以最后一行应该是第 75 行和第 193 行之间的 A 的平均值,193-75+1 = 119 点贡献:
mean(data$A[75:193])
## [1] 1.772121
2) sapply 我们还可以定义一个索引函数,它给定一个行号生成要平均的索引,然后用它来生成均值和计数。
library(dplyr)
library(zoo)
indexes <- function(ix, ym, x = ym[ix]) which(ym >= x-1 & ym <= x - 1/12)
res2 <- data %>%
do({ indexList <- lapply(1:nrow(.), indexes, .$Year_Month)
mutate(., B = sapply(indexList, function(x) mean(A[x])), n = lengths(indexList))
})
all.equal(res, res2)
## [1] TRUE
3) rollapply 请注意,rollapply 不限于常量 window 大小,因为宽度参数可以是宽度向量或偏移量列表。有关该功能的更多信息,请参阅 ?rollapply。使用 (2) 中的索引创建索引列表,从每个索引中减去当前索引以给出偏移量,然后将其用作 rollapply 宽度参数。
library(dplyr)
library(zoo)
res3 <- data %>%
do({ width <- lapply(1:nrow(.), function(ix) indexes(ix, .$Year_Month) - ix)
mutate(., B = rollapply(A, width, mean), n = lengths(width))
})
all.equal(res3, res)
## [1] TRUE
4) rollapply - 2 在 (3) 中我们直接使用变量 window size 和 rollapply 但另一种方法是将问题减少到固定 window 大小,然后在其上使用 rollapply。
library(dplyr)
library(zoo)
roll <- function(x, fill=NA) rollapply(x, list(-seq(12)), sum, partial=TRUE, fill=fill)
summary <- data %>%
group_by(Year_Month) %>%
summarize(s = sum(A), n = n(), .groups = "drop") %>%
mutate(s = roll(s), n = roll(n, fill = 0), B = s/n) %>%
select(Year_Month, B, n)
res4 <- data %>%
left_join(summary, by = "Year_Month")
all.equal(res, res4)
## [1] TRUE
备注
因为题目用的是随机数,没有set.seed,图书馆
缺少语句,并且由于使用 Sys.Date() 它每天都会给出不同的结果它的代码不可重现所以要明确我们使用:
library(dplyr)
library(zoo)
set.seed(123)
A <- cumsum(rnorm(200))
Date <- as.Date("2021-06-29") + cumsum(sample(5, 200, replace = TRUE))
data <- data.frame(Date, A) %>% mutate(Year_Month = as.yearmon(Date))
鉴于已编辑问题的解释。
- 你又做错了。对于滚动计算,即根据前 n 个变量(大小为 n 的向量)为每个日期分配一个值,您需要一个 return 为标量(大小为 1 的向量)的函数,例如mean、sum 等,因此还有 rollmean、rollsum 等。但是
arima(rnorm(50), order = c(1,0,0))$residuals
return 一个长度为 50 的向量。那么除非你进一步总结,否则如何将大小为 n>1 的向量分配给单个值.
- 如果你进一步应用一些聚合函数,比如
mean
,你的问题就可以解决。
- 例如
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, \(x) mean(arima(x, order = c(1,0,0))$residuals), .before = months(12), .after = months(-1), .complete = T))
这适用于我的 R
回答
一种slider
方法。但是,由于滑块索引直接作用于日期字段,因此我没有使用 Year_month
列,而是创建了一个虚拟列作为 floor_date
.
slider::slider_index_dbl
的语法说明
- 它 return 是一个
double
类型的向量,因此后缀 dbl
- 它还使用
index
您的日期列,因此 _index_
- 第一个参数是要从中执行 value/rolling 计算的向量
- 第二个参数是索引,因为您使用的是月份而不是日期,所以我创建了
dummy
列
- 第三个参数是函数即
mean
待计算
- .
before
用于取当前索引 前的12个索引值
.after
用于排除当前索引,因此 -1
- 库(lubridate)也可以加载,因为这里使用了几个函数。
library(tidyverse)
library(zoo)
set.seed(123)
A <- cumsum(rnorm(200))
Date <- Sys.Date() + cumsum(sample(1:5, 200, replace = TRUE)) # unequaly spaced time series
data<-data.frame(Date,A)
data<-data%>%
mutate(Year_Month=as.yearmon(Date))
library(slider)
library(lubridate)
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, mean, .before = months(12), .after = months(-1)))
#> Date A Year_Month dummy B
#> 1 2021-07-02 -0.56047565 Jul 2021 2021-07-01 NaN
#> 2 2021-07-03 -0.79065314 Jul 2021 2021-07-01 NaN
#> 3 2021-07-08 0.76805518 Jul 2021 2021-07-01 NaN
#> 4 2021-07-09 0.83856357 Jul 2021 2021-07-01 NaN
#> 5 2021-07-13 0.96785130 Jul 2021 2021-07-01 NaN
#> 6 2021-07-15 2.68291629 Jul 2021 2021-07-01 NaN
#> 7 2021-07-17 3.14383250 Jul 2021 2021-07-01 NaN
#> 8 2021-07-21 1.87877126 Jul 2021 2021-07-01 NaN
#> 9 2021-07-22 1.19191841 Jul 2021 2021-07-01 NaN
#> 10 2021-07-26 0.74625644 Jul 2021 2021-07-01 NaN
#> 11 2021-07-31 1.97033824 Jul 2021 2021-07-01 NaN
#> 12 2021-08-05 2.33015207 Aug 2021 2021-08-01 1.1670340
#> 13 2021-08-08 2.73092352 Aug 2021 2021-08-01 1.1670340
#> 14 2021-08-13 2.84160623 Aug 2021 2021-08-01 1.1670340
#> 15 2021-08-18 2.28576510 Aug 2021 2021-08-01 1.1670340
#> 16 2021-08-21 4.07267823 Aug 2021 2021-08-01 1.1670340
#> 17 2021-08-22 4.57052871 Aug 2021 2021-08-01 1.1670340
#> 18 2021-08-25 2.60391156 Aug 2021 2021-08-01 1.1670340
#> 19 2021-08-29 3.30526746 Aug 2021 2021-08-01 1.1670340
#> 20 2021-08-31 2.83247605 Aug 2021 2021-08-01 1.1670340
#> 21 2021-09-05 1.76465234 Sep 2021 2021-09-01 2.0205342
#> 22 2021-09-06 1.54667743 Sep 2021 2021-09-01 2.0205342
#> 23 2021-09-10 0.52067298 Sep 2021 2021-09-01 2.0205342
#> 24 2021-09-13 -0.20821825 Sep 2021 2021-09-01 2.0205342
#> 25 2021-09-14 -0.83325752 Sep 2021 2021-09-01 2.0205342
#> 26 2021-09-16 -2.51995083 Sep 2021 2021-09-01 2.0205342
#> 27 2021-09-19 -1.68216378 Sep 2021 2021-09-01 2.0205342
#> 28 2021-09-22 -1.52879067 Sep 2021 2021-09-01 2.0205342
#> 29 2021-09-23 -2.66692760 Sep 2021 2021-09-01 2.0205342
#> 30 2021-09-25 -1.41311268 Sep 2021 2021-09-01 2.0205342
#> 31 2021-09-26 -0.98664846 Sep 2021 2021-09-01 2.0205342
#> 32 2021-09-28 -1.28171994 Sep 2021 2021-09-01 2.0205342
#> 33 2021-09-30 -0.38659428 Sep 2021 2021-09-01 2.0205342
#> 34 2021-10-02 0.49153921 Oct 2021 2021-10-01 0.9313728
#> 35 2021-10-07 1.31312029 Oct 2021 2021-10-01 0.9313728
#> 36 2021-10-11 2.00176054 Oct 2021 2021-10-01 0.9313728
#> 37 2021-10-15 2.55567820 Oct 2021 2021-10-01 0.9313728
#> 38 2021-10-20 2.49376648 Oct 2021 2021-10-01 0.9313728
#> 39 2021-10-24 2.18780382 Oct 2021 2021-10-01 0.9313728
#> 40 2021-10-25 1.80733282 Oct 2021 2021-10-01 0.9313728
#> 41 2021-10-27 1.11262584 Oct 2021 2021-10-01 0.9313728
#> 42 2021-10-28 0.90470856 Oct 2021 2021-10-01 0.9313728
#> 43 2021-10-30 -0.36068779 Oct 2021 2021-10-01 0.9313728
#> 44 2021-11-02 1.80826818 Nov 2021 2021-11-01 1.0521616
#> 45 2021-11-04 3.01623018 Nov 2021 2021-11-01 1.0521616
#> 46 2021-11-07 1.89312159 Nov 2021 2021-11-01 1.0521616
#> 47 2021-11-08 1.49023676 Nov 2021 2021-11-01 1.0521616
#> 48 2021-11-12 1.02358140 Nov 2021 2021-11-01 1.0521616
#> 49 2021-11-14 1.80354652 Nov 2021 2021-11-01 1.0521616
#> 50 2021-11-17 1.72017745 Nov 2021 2021-11-01 1.0521616
#> 51 2021-11-22 1.97349597 Nov 2021 2021-11-01 1.0521616
#> 52 2021-11-27 1.94494921 Nov 2021 2021-11-01 1.0521616
#> 53 2021-11-30 1.90207876 Nov 2021 2021-11-01 1.0521616
#> 54 2021-12-02 3.27068104 Dec 2021 2021-12-01 1.2041252
#> 55 2021-12-07 3.04491005 Dec 2021 2021-12-01 1.2041252
#> 56 2021-12-11 4.56138066 Dec 2021 2021-12-01 1.2041252
#> 57 2021-12-13 3.01262785 Dec 2021 2021-12-01 1.2041252
#> 58 2021-12-14 3.59724160 Dec 2021 2021-12-01 1.2041252
#> 59 2021-12-18 3.72109585 Dec 2021 2021-12-01 1.2041252
#> 60 2021-12-19 3.93703742 Dec 2021 2021-12-01 1.2041252
#> 61 2021-12-23 4.31667690 Dec 2021 2021-12-01 1.2041252
#> 62 2021-12-28 3.81435345 Dec 2021 2021-12-01 1.2041252
#> 63 2022-01-01 3.48114606 Jan 2022 2022-01-01 1.5660426
#> 64 2022-01-03 2.46257068 Jan 2022 2022-01-01 1.5660426
#> 65 2022-01-05 1.39077945 Jan 2022 2022-01-01 1.5660426
#> 66 2022-01-09 1.69430809 Jan 2022 2022-01-01 1.5660426
#> 67 2022-01-12 2.14251787 Jan 2022 2022-01-01 1.5660426
#> 68 2022-01-17 2.19552210 Jan 2022 2022-01-01 1.5660426
#> 69 2022-01-19 3.11778957 Jan 2022 2022-01-01 1.5660426
#> 70 2022-01-22 5.16787425 Jan 2022 2022-01-01 1.5660426
#> 71 2022-01-25 4.67684309 Jan 2022 2022-01-01 1.5660426
#> 72 2022-01-28 2.36767421 Jan 2022 2022-01-01 1.5660426
#> 73 2022-01-29 3.37341274 Jan 2022 2022-01-01 1.5660426
#> 74 2022-01-30 2.66421197 Jan 2022 2022-01-01 1.5660426
#> 75 2022-02-02 1.97620336 Feb 2022 2022-02-01 1.7814769
#> 76 2022-02-06 3.00177473 Feb 2022 2022-02-01 1.7814769
#> 77 2022-02-10 2.71700172 Feb 2022 2022-02-01 1.7814769
#> 78 2022-02-15 1.49628401 Feb 2022 2022-02-01 1.7814769
#> 79 2022-02-17 1.67758749 Feb 2022 2022-02-01 1.7814769
#> 80 2022-02-19 1.53869613 Feb 2022 2022-02-01 1.7814769
#> 81 2022-02-23 1.54446031 Feb 2022 2022-02-01 1.7814769
#> 82 2022-02-25 1.92974071 Feb 2022 2022-02-01 1.7814769
#> 83 2022-02-26 1.55908068 Feb 2022 2022-02-01 1.7814769
#> 84 2022-03-02 2.20345723 Mar 2022 2022-03-01 1.7984352
#> 85 2022-03-05 1.98297067 Mar 2022 2022-03-01 1.7984352
#> 86 2022-03-06 2.31475263 Mar 2022 2022-03-01 1.7984352
#> 87 2022-03-11 3.41159164 Mar 2022 2022-03-01 1.7984352
#> 88 2022-03-14 3.84677313 Mar 2022 2022-03-01 1.7984352
#> 89 2022-03-18 3.52084155 Mar 2022 2022-03-01 1.7984352
#> 90 2022-03-20 4.66964917 Mar 2022 2022-03-01 1.7984352
#> 91 2022-03-25 5.66315302 Mar 2022 2022-03-01 1.7984352
#> 92 2022-03-30 6.21154998 Mar 2022 2022-03-01 1.7984352
#> 93 2022-04-01 6.45028172 Apr 2022 2022-04-01 1.9901615
#> 94 2022-04-03 5.82237564 Apr 2022 2022-04-01 1.9901615
#> 95 2022-04-05 7.18302809 Apr 2022 2022-04-01 1.9901615
#> 96 2022-04-06 6.58276850 Apr 2022 2022-04-01 1.9901615
#> 97 2022-04-09 8.77010150 Apr 2022 2022-04-01 1.9901615
#> 98 2022-04-13 10.30271212 Apr 2022 2022-04-01 1.9901615
#> 99 2022-04-16 10.06701176 Apr 2022 2022-04-01 1.9901615
#> 100 2022-04-19 9.04059086 Apr 2022 2022-04-01 1.9901615
#> 101 2022-04-22 8.33018430 Apr 2022 2022-04-01 1.9901615
#> 102 2022-04-26 8.58706801 Apr 2022 2022-04-01 1.9901615
#> 103 2022-04-30 8.34037613 Apr 2022 2022-04-01 1.9901615
#> 104 2022-05-03 7.99283353 May 2022 2022-05-01 2.6463239
#> 105 2022-05-07 7.04121496 May 2022 2022-05-01 2.6463239
#> 106 2022-05-09 6.99618724 May 2022 2022-05-01 2.6463239
#> 107 2022-05-12 6.21128277 May 2022 2022-05-01 2.6463239
#> 108 2022-05-16 4.54334083 May 2022 2022-05-01 2.6463239
#> 109 2022-05-18 4.16311431 May 2022 2022-05-01 2.6463239
#> 110 2022-05-19 5.08211092 May 2022 2022-05-01 2.6463239
#> 111 2022-05-22 4.50676396 May 2022 2022-05-01 2.6463239
#> 112 2022-05-26 5.11472828 May 2022 2022-05-01 2.6463239
#> 113 2022-05-27 3.49684557 May 2022 2022-05-01 2.6463239
#> 114 2022-05-28 3.44128361 May 2022 2022-05-01 2.6463239
#> 115 2022-06-01 3.96069081 Jun 2022 2022-06-01 2.9049216
#> 116 2022-06-05 4.26184417 Jun 2022 2022-06-01 2.9049216
#> 117 2022-06-10 4.36752037 Jun 2022 2022-06-01 2.9049216
#> 118 2022-06-11 3.72681436 Jun 2022 2022-06-01 2.9049216
#> 119 2022-06-15 2.87711001 Jun 2022 2022-06-01 2.9049216
#> 120 2022-06-20 1.85298122 Jun 2022 2022-06-01 2.9049216
#> 121 2022-06-23 1.97062782 Jun 2022 2022-06-01 2.9049216
#> 122 2022-06-25 1.02315321 Jun 2022 2022-06-01 2.9049216
#> 123 2022-06-30 0.53259576 Jun 2022 2022-06-01 2.9049216
#> 124 2022-07-04 0.27650357 Jul 2022 2022-07-01 2.8921496
#> 125 2022-07-08 2.12036558 Jul 2022 2022-07-01 2.8921496
#> 126 2022-07-09 1.46841567 Jul 2022 2022-07-01 2.8921496
#> 127 2022-07-12 1.70380225 Jul 2022 2022-07-01 2.8921496
#> 128 2022-07-15 1.78176310 Jul 2022 2022-07-01 2.8921496
#> 129 2022-07-18 0.81990646 Jul 2022 2022-07-01 2.8921496
#> 130 2022-07-23 0.74859838 Jul 2022 2022-07-01 2.8921496
#> 131 2022-07-25 2.19314923 Jul 2022 2022-07-01 2.8921496
#> 132 2022-07-30 2.64465329 Jul 2022 2022-07-01 2.8921496
#> 133 2022-08-01 2.68588621 Aug 2022 2022-08-01 2.9475552
#> 134 2022-08-02 2.26338938 Aug 2022 2022-08-01 2.9475552
#> 135 2022-08-06 0.21014215 Aug 2022 2022-08-01 2.9475552
#> 136 2022-08-08 1.34147937 Aug 2022 2022-08-01 2.9475552
#> 137 2022-08-10 -0.11916070 Aug 2022 2022-08-01 2.9475552
#> 138 2022-08-13 0.62078681 Aug 2022 2022-08-01 2.9475552
#> 139 2022-08-18 2.52989038 Aug 2022 2022-08-01 2.9475552
#> 140 2022-08-19 1.08599722 Aug 2022 2022-08-01 2.9475552
#> 141 2022-08-22 1.78778155 Aug 2022 2022-08-01 2.9475552
#> 142 2022-08-25 1.52558406 Aug 2022 2022-08-01 2.9475552
#> 143 2022-08-27 -0.04656010 Aug 2022 2022-08-01 2.9475552
#> 144 2022-09-01 -1.56122775 Sep 2022 2022-09-01 2.7883422
#> 145 2022-09-02 -3.16276392 Sep 2022 2022-09-01 2.7883422
#> 146 2022-09-06 -3.69367045 Sep 2022 2022-09-01 2.7883422
#> 147 2022-09-10 -5.15542603 Sep 2022 2022-09-01 2.7883422
#> 148 2022-09-11 -4.46750926 Sep 2022 2022-09-01 2.7883422
#> 149 2022-09-14 -2.36740032 Sep 2022 2022-09-01 2.7883422
#> 150 2022-09-18 -3.65443079 Sep 2022 2022-09-01 2.7883422
#> 151 2022-09-22 -2.86669195 Sep 2022 2022-09-01 2.7883422
#> 152 2022-09-23 -2.09764971 Sep 2022 2022-09-01 2.7883422
#> 153 2022-09-28 -1.76544713 Sep 2022 2022-09-01 2.7883422
#> 154 2022-10-01 -2.77382373 Oct 2022 2022-10-01 2.6820771
#> 155 2022-10-05 -2.89327634 Oct 2022 2022-10-01 2.6820771
#> 156 2022-10-07 -3.17367168 Oct 2022 2022-10-01 2.6820771
#> 157 2022-10-10 -2.61068214 Oct 2022 2022-10-01 2.6820771
#> 158 2022-10-12 -2.98312090 Oct 2022 2022-10-01 2.6820771
#> 159 2022-10-15 -2.00614751 Oct 2022 2022-10-01 2.6820771
#> 160 2022-10-18 -2.38072837 Oct 2022 2022-10-01 2.6820771
#> 161 2022-10-19 -1.32801690 Oct 2022 2022-10-01 2.6820771
#> 162 2022-10-24 -2.37719391 Oct 2022 2022-10-01 2.6820771
#> 163 2022-10-28 -3.63734916 Oct 2022 2022-10-01 2.6820771
#> 164 2022-11-01 -0.39630922 Nov 2022 2022-11-01 2.3431466
#> 165 2022-11-06 -0.81316681 Nov 2022 2022-11-01 2.3431466
#> 166 2022-11-09 -0.51493922 Nov 2022 2022-11-01 2.3431466
#> 167 2022-11-11 0.12163046 Nov 2022 2022-11-01 2.3431466
#> 168 2022-11-15 -0.36215017 Nov 2022 2022-11-01 2.3431466
#> 169 2022-11-20 0.15471187 Nov 2022 2022-11-01 2.3431466
#> 170 2022-11-22 0.52367640 Nov 2022 2022-11-01 2.3431466
#> 171 2022-11-25 0.30829589 Nov 2022 2022-11-01 2.3431466
#> 172 2022-11-28 0.37358893 Nov 2022 2022-11-01 2.3431466
#> 173 2022-11-29 0.33952167 Nov 2022 2022-11-01 2.3431466
#> 174 2022-12-02 2.46797357 Dec 2022 2022-12-01 2.1861398
#> 175 2022-12-04 1.72663748 Dec 2022 2022-12-01 2.1861398
#> 176 2022-12-07 0.63064121 Dec 2022 2022-12-01 2.1861398
#> 177 2022-12-10 0.66842961 Dec 2022 2022-12-01 2.1861398
#> 178 2022-12-11 0.97891036 Dec 2022 2022-12-01 2.1861398
#> 179 2022-12-13 1.41543384 Dec 2022 2022-12-01 2.1861398
#> 180 2022-12-15 0.95706850 Dec 2022 2022-12-01 2.1861398
#> 181 2022-12-17 -0.10625763 Dec 2022 2022-12-01 2.1861398
#> 182 2022-12-21 1.15692755 Dec 2022 2022-12-01 2.1861398
#> 183 2022-12-22 0.80727716 Dec 2022 2022-12-01 2.1861398
#> 184 2022-12-27 -0.05823570 Dec 2022 2022-12-01 2.1861398
#> 185 2023-01-01 -0.29451527 Jan 2023 2023-01-01 1.9647998
#> 186 2023-01-04 -0.49169117 Jan 2023 2023-01-01 1.9647998
#> 187 2023-01-07 0.61822912 Jan 2023 2023-01-01 1.9647998
#> 188 2023-01-12 0.70296641 Jan 2023 2023-01-01 1.9647998
#> 189 2023-01-13 1.45702020 Jan 2023 2023-01-01 1.9647998
#> 190 2023-01-17 0.95772818 Jan 2023 2023-01-01 1.9647998
#> 191 2023-01-19 1.17217349 Jan 2023 2023-01-01 1.9647998
#> 192 2023-01-24 0.84748758 Jan 2023 2023-01-01 1.9647998
#> 193 2023-01-28 0.94207111 Jan 2023 2023-01-01 1.9647998
#> 194 2023-02-02 0.04670775 Feb 2023 2023-02-01 1.7721209
#> 195 2023-02-03 -1.26409378 Feb 2023 2023-02-01 1.7721209
#> 196 2023-02-05 0.73311960 Feb 2023 2023-02-01 1.7721209
#> 197 2023-02-08 1.33382843 Feb 2023 2023-02-01 1.7721209
#> 198 2023-02-09 0.08255706 Feb 2023 2023-02-01 1.7721209
#> 199 2023-02-10 -0.52860885 Feb 2023 2023-02-01 1.7721209
#> 200 2023-02-13 -1.71408894 Feb 2023 2023-02-01 1.7721209
由 reprex package (v2.0.0)
于 2021-06-29 创建
作为滚动平均值的检查,我计算了 excel 中前 123 行的平均值,即 2.8921496
并正确显示在 July 2022
行中。
如评论所述,如果只需要完整的案例-
- 使用参数
.complete = TRUE
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, mean, .before = months(12), .after = months(-1), .complete = T))
Date A Year_Month dummy B
1 2021-07-03 -0.56047565 Jul 2021 2021-07-01 NA
2 2021-07-04 -0.79065314 Jul 2021 2021-07-01 NA
3 2021-07-09 0.76805518 Jul 2021 2021-07-01 NA
4 2021-07-10 0.83856357 Jul 2021 2021-07-01 NA
5 2021-07-14 0.96785130 Jul 2021 2021-07-01 NA
6 2021-07-16 2.68291629 Jul 2021 2021-07-01 NA
7 2021-07-18 3.14383250 Jul 2021 2021-07-01 NA
8 2021-07-22 1.87877126 Jul 2021 2021-07-01 NA
9 2021-07-23 1.19191841 Jul 2021 2021-07-01 NA
10 2021-07-27 0.74625644 Jul 2021 2021-07-01 NA
11 2021-08-01 1.97033824 Aug 2021 2021-08-01 NA
12 2021-08-06 2.33015207 Aug 2021 2021-08-01 NA
13 2021-08-09 2.73092352 Aug 2021 2021-08-01 NA
14 2021-08-14 2.84160623 Aug 2021 2021-08-01 NA
15 2021-08-19 2.28576510 Aug 2021 2021-08-01 NA
16 2021-08-22 4.07267823 Aug 2021 2021-08-01 NA
17 2021-08-23 4.57052871 Aug 2021 2021-08-01 NA
18 2021-08-26 2.60391156 Aug 2021 2021-08-01 NA
19 2021-08-30 3.30526746 Aug 2021 2021-08-01 NA
20 2021-09-01 2.83247605 Sep 2021 2021-09-01 NA
21 2021-09-06 1.76465234 Sep 2021 2021-09-01 NA
22 2021-09-07 1.54667743 Sep 2021 2021-09-01 NA
23 2021-09-11 0.52067298 Sep 2021 2021-09-01 NA
24 2021-09-14 -0.20821825 Sep 2021 2021-09-01 NA
25 2021-09-15 -0.83325752 Sep 2021 2021-09-01 NA
26 2021-09-17 -2.51995083 Sep 2021 2021-09-01 NA
27 2021-09-20 -1.68216378 Sep 2021 2021-09-01 NA
28 2021-09-23 -1.52879067 Sep 2021 2021-09-01 NA
29 2021-09-24 -2.66692760 Sep 2021 2021-09-01 NA
30 2021-09-26 -1.41311268 Sep 2021 2021-09-01 NA
31 2021-09-27 -0.98664846 Sep 2021 2021-09-01 NA
32 2021-09-29 -1.28171994 Sep 2021 2021-09-01 NA
33 2021-10-01 -0.38659428 Oct 2021 2021-10-01 NA
34 2021-10-03 0.49153921 Oct 2021 2021-10-01 NA
35 2021-10-08 1.31312029 Oct 2021 2021-10-01 NA
36 2021-10-12 2.00176054 Oct 2021 2021-10-01 NA
37 2021-10-16 2.55567820 Oct 2021 2021-10-01 NA
38 2021-10-21 2.49376648 Oct 2021 2021-10-01 NA
39 2021-10-25 2.18780382 Oct 2021 2021-10-01 NA
40 2021-10-26 1.80733282 Oct 2021 2021-10-01 NA
41 2021-10-28 1.11262584 Oct 2021 2021-10-01 NA
42 2021-10-29 0.90470856 Oct 2021 2021-10-01 NA
43 2021-10-31 -0.36068779 Oct 2021 2021-10-01 NA
44 2021-11-03 1.80826818 Nov 2021 2021-11-01 NA
45 2021-11-05 3.01623018 Nov 2021 2021-11-01 NA
46 2021-11-08 1.89312159 Nov 2021 2021-11-01 NA
47 2021-11-09 1.49023676 Nov 2021 2021-11-01 NA
48 2021-11-13 1.02358140 Nov 2021 2021-11-01 NA
49 2021-11-15 1.80354652 Nov 2021 2021-11-01 NA
50 2021-11-18 1.72017745 Nov 2021 2021-11-01 NA
51 2021-11-23 1.97349597 Nov 2021 2021-11-01 NA
52 2021-11-28 1.94494921 Nov 2021 2021-11-01 NA
53 2021-12-01 1.90207876 Dec 2021 2021-12-01 NA
54 2021-12-03 3.27068104 Dec 2021 2021-12-01 NA
55 2021-12-08 3.04491005 Dec 2021 2021-12-01 NA
56 2021-12-12 4.56138066 Dec 2021 2021-12-01 NA
57 2021-12-14 3.01262785 Dec 2021 2021-12-01 NA
58 2021-12-15 3.59724160 Dec 2021 2021-12-01 NA
59 2021-12-19 3.72109585 Dec 2021 2021-12-01 NA
60 2021-12-20 3.93703742 Dec 2021 2021-12-01 NA
61 2021-12-24 4.31667690 Dec 2021 2021-12-01 NA
62 2021-12-29 3.81435345 Dec 2021 2021-12-01 NA
63 2022-01-02 3.48114606 Jan 2022 2022-01-01 NA
64 2022-01-04 2.46257068 Jan 2022 2022-01-01 NA
65 2022-01-06 1.39077945 Jan 2022 2022-01-01 NA
66 2022-01-10 1.69430809 Jan 2022 2022-01-01 NA
67 2022-01-13 2.14251787 Jan 2022 2022-01-01 NA
68 2022-01-18 2.19552210 Jan 2022 2022-01-01 NA
69 2022-01-20 3.11778957 Jan 2022 2022-01-01 NA
70 2022-01-23 5.16787425 Jan 2022 2022-01-01 NA
71 2022-01-26 4.67684309 Jan 2022 2022-01-01 NA
72 2022-01-29 2.36767421 Jan 2022 2022-01-01 NA
73 2022-01-30 3.37341274 Jan 2022 2022-01-01 NA
74 2022-01-31 2.66421197 Jan 2022 2022-01-01 NA
75 2022-02-03 1.97620336 Feb 2022 2022-02-01 NA
76 2022-02-07 3.00177473 Feb 2022 2022-02-01 NA
77 2022-02-11 2.71700172 Feb 2022 2022-02-01 NA
78 2022-02-16 1.49628401 Feb 2022 2022-02-01 NA
79 2022-02-18 1.67758749 Feb 2022 2022-02-01 NA
80 2022-02-20 1.53869613 Feb 2022 2022-02-01 NA
81 2022-02-24 1.54446031 Feb 2022 2022-02-01 NA
82 2022-02-26 1.92974071 Feb 2022 2022-02-01 NA
83 2022-02-27 1.55908068 Feb 2022 2022-02-01 NA
84 2022-03-03 2.20345723 Mar 2022 2022-03-01 NA
85 2022-03-06 1.98297067 Mar 2022 2022-03-01 NA
86 2022-03-07 2.31475263 Mar 2022 2022-03-01 NA
87 2022-03-12 3.41159164 Mar 2022 2022-03-01 NA
88 2022-03-15 3.84677313 Mar 2022 2022-03-01 NA
89 2022-03-19 3.52084155 Mar 2022 2022-03-01 NA
90 2022-03-21 4.66964917 Mar 2022 2022-03-01 NA
91 2022-03-26 5.66315302 Mar 2022 2022-03-01 NA
92 2022-03-31 6.21154998 Mar 2022 2022-03-01 NA
93 2022-04-02 6.45028172 Apr 2022 2022-04-01 NA
94 2022-04-04 5.82237564 Apr 2022 2022-04-01 NA
95 2022-04-06 7.18302809 Apr 2022 2022-04-01 NA
96 2022-04-07 6.58276850 Apr 2022 2022-04-01 NA
97 2022-04-10 8.77010150 Apr 2022 2022-04-01 NA
98 2022-04-14 10.30271212 Apr 2022 2022-04-01 NA
99 2022-04-17 10.06701176 Apr 2022 2022-04-01 NA
100 2022-04-20 9.04059086 Apr 2022 2022-04-01 NA
101 2022-04-23 8.33018430 Apr 2022 2022-04-01 NA
102 2022-04-27 8.58706801 Apr 2022 2022-04-01 NA
103 2022-05-01 8.34037613 May 2022 2022-05-01 NA
104 2022-05-04 7.99283353 May 2022 2022-05-01 NA
105 2022-05-08 7.04121496 May 2022 2022-05-01 NA
106 2022-05-10 6.99618724 May 2022 2022-05-01 NA
107 2022-05-13 6.21128277 May 2022 2022-05-01 NA
108 2022-05-17 4.54334083 May 2022 2022-05-01 NA
109 2022-05-19 4.16311431 May 2022 2022-05-01 NA
110 2022-05-20 5.08211092 May 2022 2022-05-01 NA
111 2022-05-23 4.50676396 May 2022 2022-05-01 NA
112 2022-05-27 5.11472828 May 2022 2022-05-01 NA
113 2022-05-28 3.49684557 May 2022 2022-05-01 NA
114 2022-05-29 3.44128361 May 2022 2022-05-01 NA
115 2022-06-02 3.96069081 Jun 2022 2022-06-01 NA
116 2022-06-06 4.26184417 Jun 2022 2022-06-01 NA
117 2022-06-11 4.36752037 Jun 2022 2022-06-01 NA
118 2022-06-12 3.72681436 Jun 2022 2022-06-01 NA
119 2022-06-16 2.87711001 Jun 2022 2022-06-01 NA
120 2022-06-21 1.85298122 Jun 2022 2022-06-01 NA
121 2022-06-24 1.97062782 Jun 2022 2022-06-01 NA
122 2022-06-26 1.02315321 Jun 2022 2022-06-01 NA
123 2022-07-01 0.53259576 Jul 2022 2022-07-01 2.911490
124 2022-07-05 0.27650357 Jul 2022 2022-07-01 2.911490
125 2022-07-09 2.12036558 Jul 2022 2022-07-01 2.911490
126 2022-07-10 1.46841567 Jul 2022 2022-07-01 2.911490
127 2022-07-13 1.70380225 Jul 2022 2022-07-01 2.911490
128 2022-07-16 1.78176310 Jul 2022 2022-07-01 2.911490
129 2022-07-19 0.81990646 Jul 2022 2022-07-01 2.911490
130 2022-07-24 0.74859838 Jul 2022 2022-07-01 2.911490
131 2022-07-26 2.19314923 Jul 2022 2022-07-01 2.911490
132 2022-07-31 2.64465329 Jul 2022 2022-07-01 2.911490
133 2022-08-02 2.68588621 Aug 2022 2022-08-01 2.939545
134 2022-08-03 2.26338938 Aug 2022 2022-08-01 2.939545
135 2022-08-07 0.21014215 Aug 2022 2022-08-01 2.939545
136 2022-08-09 1.34147937 Aug 2022 2022-08-01 2.939545
137 2022-08-11 -0.11916070 Aug 2022 2022-08-01 2.939545
138 2022-08-14 0.62078681 Aug 2022 2022-08-01 2.939545
139 2022-08-19 2.52989038 Aug 2022 2022-08-01 2.939545
140 2022-08-20 1.08599722 Aug 2022 2022-08-01 2.939545
141 2022-08-23 1.78778155 Aug 2022 2022-08-01 2.939545
142 2022-08-26 1.52558406 Aug 2022 2022-08-01 2.939545
143 2022-08-28 -0.04656010 Aug 2022 2022-08-01 2.939545
144 2022-09-02 -1.56122775 Sep 2022 2022-09-01 2.788698
145 2022-09-03 -3.16276392 Sep 2022 2022-09-01 2.788698
146 2022-09-07 -3.69367045 Sep 2022 2022-09-01 2.788698
147 2022-09-11 -5.15542603 Sep 2022 2022-09-01 2.788698
148 2022-09-12 -4.46750926 Sep 2022 2022-09-01 2.788698
149 2022-09-15 -2.36740032 Sep 2022 2022-09-01 2.788698
150 2022-09-19 -3.65443079 Sep 2022 2022-09-01 2.788698
151 2022-09-23 -2.86669195 Sep 2022 2022-09-01 2.788698
152 2022-09-24 -2.09764971 Sep 2022 2022-09-01 2.788698
153 2022-09-29 -1.76544713 Sep 2022 2022-09-01 2.788698
154 2022-10-02 -2.77382373 Oct 2022 2022-10-01 2.656716
155 2022-10-06 -2.89327634 Oct 2022 2022-10-01 2.656716
156 2022-10-08 -3.17367168 Oct 2022 2022-10-01 2.656716
157 2022-10-11 -2.61068214 Oct 2022 2022-10-01 2.656716
158 2022-10-13 -2.98312090 Oct 2022 2022-10-01 2.656716
159 2022-10-16 -2.00614751 Oct 2022 2022-10-01 2.656716
160 2022-10-19 -2.38072837 Oct 2022 2022-10-01 2.656716
161 2022-10-20 -1.32801690 Oct 2022 2022-10-01 2.656716
162 2022-10-25 -2.37719391 Oct 2022 2022-10-01 2.656716
163 2022-10-29 -3.63734916 Oct 2022 2022-10-01 2.656716
164 2022-11-02 -0.39630922 Nov 2022 2022-11-01 2.343147
165 2022-11-07 -0.81316681 Nov 2022 2022-11-01 2.343147
166 2022-11-10 -0.51493922 Nov 2022 2022-11-01 2.343147
167 2022-11-12 0.12163046 Nov 2022 2022-11-01 2.343147
168 2022-11-16 -0.36215017 Nov 2022 2022-11-01 2.343147
169 2022-11-21 0.15471187 Nov 2022 2022-11-01 2.343147
170 2022-11-23 0.52367640 Nov 2022 2022-11-01 2.343147
171 2022-11-26 0.30829589 Nov 2022 2022-11-01 2.343147
172 2022-11-29 0.37358893 Nov 2022 2022-11-01 2.343147
173 2022-11-30 0.33952167 Nov 2022 2022-11-01 2.343147
174 2022-12-03 2.46797357 Dec 2022 2022-12-01 2.183792
175 2022-12-05 1.72663748 Dec 2022 2022-12-01 2.183792
176 2022-12-08 0.63064121 Dec 2022 2022-12-01 2.183792
177 2022-12-11 0.66842961 Dec 2022 2022-12-01 2.183792
178 2022-12-12 0.97891036 Dec 2022 2022-12-01 2.183792
179 2022-12-14 1.41543384 Dec 2022 2022-12-01 2.183792
180 2022-12-16 0.95706850 Dec 2022 2022-12-01 2.183792
181 2022-12-18 -0.10625763 Dec 2022 2022-12-01 2.183792
182 2022-12-22 1.15692755 Dec 2022 2022-12-01 2.183792
183 2022-12-23 0.80727716 Dec 2022 2022-12-01 2.183792
184 2022-12-28 -0.05823570 Dec 2022 2022-12-01 2.183792
185 2023-01-02 -0.29451527 Jan 2023 2023-01-01 1.964800
186 2023-01-05 -0.49169117 Jan 2023 2023-01-01 1.964800
187 2023-01-08 0.61822912 Jan 2023 2023-01-01 1.964800
188 2023-01-13 0.70296641 Jan 2023 2023-01-01 1.964800
189 2023-01-14 1.45702020 Jan 2023 2023-01-01 1.964800
190 2023-01-18 0.95772818 Jan 2023 2023-01-01 1.964800
191 2023-01-20 1.17217349 Jan 2023 2023-01-01 1.964800
192 2023-01-25 0.84748758 Jan 2023 2023-01-01 1.964800
193 2023-01-29 0.94207111 Jan 2023 2023-01-01 1.964800
194 2023-02-03 0.04670775 Feb 2023 2023-02-01 1.772121
195 2023-02-04 -1.26409378 Feb 2023 2023-02-01 1.772121
196 2023-02-06 0.73311960 Feb 2023 2023-02-01 1.772121
197 2023-02-09 1.33382843 Feb 2023 2023-02-01 1.772121
198 2023-02-10 0.08255706 Feb 2023 2023-02-01 1.772121
199 2023-02-11 -0.52860885 Feb 2023 2023-02-01 1.772121
200 2023-02-14 -1.71408894 Feb 2023 2023-02-01 1.772121
如果您想在 slider
中使用自定义函数,您可以在那里使用不可见函数样式。喜欢
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, \(x) mean(x, na.rm=T), .before = months(12), .after = months(-1), .complete = T))
我正在管理股票每日数据集。这是示例代码:
A <- cumsum(rnorm(200))
Date <- Sys.Date() + cumsum(sample(1:5, 200, replace = TRUE)) # unequaly spaced time series
data<-data.frame(Date,A)
data<-data%>%
mutate(Year_Month=as.yearmon(Date))
我的 objective 是计算一个新的月度变量 B。它是根据以月结束的 12 个月期间的每日数据 A 计算的平均值。 例如,2021-07-03属于2021年7月,我需要设置前12个月的window,从2020年7月到2021年6月,我使用所有每日计算平均值data A within this window. 因此,对于[2021-07-03,2021-07-31],结果B是一样的。
我尝试使用 rollapply
和 runner
函数,但困难在于 window 不是常数,因为每个月的天数不是常数。我想在 dplyr 上下文中实现这个目标。
预期的示例输出如下所示:
Date Year_Month A B
2021-07-03 July 2021 3.3 2.3
2021-07-08 July 2021 1.5 2.3
2021-07-11 July 2021 4.3 2.3
...
2021-08-04 Aug 2021 2.2 3.2
2021-08-07 Aug 2021 5.7 3.2
2021-08-09 Aug 2021 4.2 3.2
我的新数据集是一个包含 348 个月观测值的纯时间序列:
Date A
2021-07-01 3.1
2021-08-01 4.5
2021-09-01 5.5
...
2021-10-01 4.4
2021-11-01 2.4
2021-12-01 5.5
我通过 AR(2) 模型滚动 window 60 个月计算冲击,结束于 month.The 第 n+1 个月的冲击是系列实际值之间的差异及其使用过去 60 个月估计的斜率系数的预测值(残差)。
我正在编写一个函数并在滑块内调用它。
AR_2<-function(x){
arima(x,order=c(1,0,0))$residuals
}
MILIQ_unexpected<-MILIQ%>%
mutate(Shock= slide_index_dbl(A, Date, AR_2, .before = months(60), .after = months(-1), .complete = T))
我收到以下错误:
Problem with `mutate()` input `B`.
x In iteration 61, the result of `.f` had size 59, not 1.
i Input `B` is `slide_index_dbl(...)`.
Backtrace:
1. `%>%`(...)
11. slider:::stop_not_all_size_one(61L, 59L)
12. slider:::glubort("In iteration {iteration}, the result of `.f` had size {size}, not 1.")
这些替代方案只使用您似乎已经在使用的包,除了 (1) 也使用 sqldf。 (2) 可以通过使用 transform 而不是 mutate 并进行相应的更改来轻松修改以删除 dplyr。
当使用可变 windows 长度时,通常还希望显示对每个长度有贡献的点数,因此我们已将其添加到下面的每个解决方案中。如果您不需要,那么解决方案可能会稍微短一些。
请注意,Year_Month - 1/12
是之前的 year/month,Year_Month - 1
是一年前的 year/month。
1) SQL 这可以用指定条件的自连接来表示。 dplyr joins 不支持这个,只使用 sql 可以更优雅地表达这个。
library(dplyr)
library(zoo)
library(sqldf)
res <- data %>%
do( sqldf("select a.*, avg(b.A) B, count(b.A) n
from [.] a
left join [.] b on b.Year_Month between a.Year_Month - 1. and a.Year_Month - 1./12.
group by a.rowid") )
tail(res)
## Date A Year_Month B n
## 195 2023-02-03 -1.26409378 Feb 2023 1.772121 119
## 196 2023-02-05 0.73311960 Feb 2023 1.772121 119
## 197 2023-02-08 1.33382843 Feb 2023 1.772121 119
## 198 2023-02-09 0.08255706 Feb 2023 1.772121 119
## 199 2023-02-10 -0.52860885 Feb 2023 1.772121 119
## 200 2023-02-13 -1.71408894 Feb 2023 1.772121 119
为了检查,我们显示每个 year/month:
的起始行data[!duplicated(data$Year_Month), ]
## Date A Year_Month
## 1 2021-07-02 -0.56047565 Jul 2021
## 12 2021-08-05 2.33015207 Aug 2021
## 21 2021-09-05 1.76465234 Sep 2021
## 34 2021-10-02 0.49153921 Oct 2021
## 44 2021-11-02 1.80826818 Nov 2021
## 54 2021-12-02 3.27068104 Dec 2021
## 63 2022-01-01 3.48114606 Jan 2022
## 75 2022-02-02 1.97620336 Feb 2022
## 84 2022-03-02 2.20345723 Mar 2022
## 93 2022-04-01 6.45028172 Apr 2022
## 104 2022-05-03 7.99283353 May 2022
## 115 2022-06-01 3.96069081 Jun 2022
## 124 2022-07-04 0.27650357 Jul 2022
## 133 2022-08-01 2.68588621 Aug 2022
## 144 2022-09-01 -1.56122775 Sep 2022
## 154 2022-10-01 -2.77382373 Oct 2022
## 164 2022-11-01 -0.39630922 Nov 2022
## 174 2022-12-02 2.46797357 Dec 2022
## 185 2023-01-01 -0.29451527 Jan 2023
## 194 2023-02-02 0.04670775 Feb 2023
所以最后一行应该是第 75 行和第 193 行之间的 A 的平均值,193-75+1 = 119 点贡献:
mean(data$A[75:193])
## [1] 1.772121
2) sapply 我们还可以定义一个索引函数,它给定一个行号生成要平均的索引,然后用它来生成均值和计数。
library(dplyr)
library(zoo)
indexes <- function(ix, ym, x = ym[ix]) which(ym >= x-1 & ym <= x - 1/12)
res2 <- data %>%
do({ indexList <- lapply(1:nrow(.), indexes, .$Year_Month)
mutate(., B = sapply(indexList, function(x) mean(A[x])), n = lengths(indexList))
})
all.equal(res, res2)
## [1] TRUE
3) rollapply 请注意,rollapply 不限于常量 window 大小,因为宽度参数可以是宽度向量或偏移量列表。有关该功能的更多信息,请参阅 ?rollapply。使用 (2) 中的索引创建索引列表,从每个索引中减去当前索引以给出偏移量,然后将其用作 rollapply 宽度参数。
library(dplyr)
library(zoo)
res3 <- data %>%
do({ width <- lapply(1:nrow(.), function(ix) indexes(ix, .$Year_Month) - ix)
mutate(., B = rollapply(A, width, mean), n = lengths(width))
})
all.equal(res3, res)
## [1] TRUE
4) rollapply - 2 在 (3) 中我们直接使用变量 window size 和 rollapply 但另一种方法是将问题减少到固定 window 大小,然后在其上使用 rollapply。
library(dplyr)
library(zoo)
roll <- function(x, fill=NA) rollapply(x, list(-seq(12)), sum, partial=TRUE, fill=fill)
summary <- data %>%
group_by(Year_Month) %>%
summarize(s = sum(A), n = n(), .groups = "drop") %>%
mutate(s = roll(s), n = roll(n, fill = 0), B = s/n) %>%
select(Year_Month, B, n)
res4 <- data %>%
left_join(summary, by = "Year_Month")
all.equal(res, res4)
## [1] TRUE
备注
因为题目用的是随机数,没有set.seed,图书馆 缺少语句,并且由于使用 Sys.Date() 它每天都会给出不同的结果它的代码不可重现所以要明确我们使用:
library(dplyr)
library(zoo)
set.seed(123)
A <- cumsum(rnorm(200))
Date <- as.Date("2021-06-29") + cumsum(sample(5, 200, replace = TRUE))
data <- data.frame(Date, A) %>% mutate(Year_Month = as.yearmon(Date))
鉴于已编辑问题的解释。
- 你又做错了。对于滚动计算,即根据前 n 个变量(大小为 n 的向量)为每个日期分配一个值,您需要一个 return 为标量(大小为 1 的向量)的函数,例如mean、sum 等,因此还有 rollmean、rollsum 等。但是
arima(rnorm(50), order = c(1,0,0))$residuals
return 一个长度为 50 的向量。那么除非你进一步总结,否则如何将大小为 n>1 的向量分配给单个值. - 如果你进一步应用一些聚合函数,比如
mean
,你的问题就可以解决。 - 例如
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, \(x) mean(arima(x, order = c(1,0,0))$residuals), .before = months(12), .after = months(-1), .complete = T))
这适用于我的 R
回答
一种slider
方法。但是,由于滑块索引直接作用于日期字段,因此我没有使用 Year_month
列,而是创建了一个虚拟列作为 floor_date
.
slider::slider_index_dbl
- 它 return 是一个
double
类型的向量,因此后缀dbl
- 它还使用
index
您的日期列,因此_index_
- 第一个参数是要从中执行 value/rolling 计算的向量
- 第二个参数是索引,因为您使用的是月份而不是日期,所以我创建了
dummy
列 - 第三个参数是函数即
mean
待计算 - .
before
用于取当前索引 前的12个索引值
.after
用于排除当前索引,因此-1
- 库(lubridate)也可以加载,因为这里使用了几个函数。
library(tidyverse)
library(zoo)
set.seed(123)
A <- cumsum(rnorm(200))
Date <- Sys.Date() + cumsum(sample(1:5, 200, replace = TRUE)) # unequaly spaced time series
data<-data.frame(Date,A)
data<-data%>%
mutate(Year_Month=as.yearmon(Date))
library(slider)
library(lubridate)
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, mean, .before = months(12), .after = months(-1)))
#> Date A Year_Month dummy B
#> 1 2021-07-02 -0.56047565 Jul 2021 2021-07-01 NaN
#> 2 2021-07-03 -0.79065314 Jul 2021 2021-07-01 NaN
#> 3 2021-07-08 0.76805518 Jul 2021 2021-07-01 NaN
#> 4 2021-07-09 0.83856357 Jul 2021 2021-07-01 NaN
#> 5 2021-07-13 0.96785130 Jul 2021 2021-07-01 NaN
#> 6 2021-07-15 2.68291629 Jul 2021 2021-07-01 NaN
#> 7 2021-07-17 3.14383250 Jul 2021 2021-07-01 NaN
#> 8 2021-07-21 1.87877126 Jul 2021 2021-07-01 NaN
#> 9 2021-07-22 1.19191841 Jul 2021 2021-07-01 NaN
#> 10 2021-07-26 0.74625644 Jul 2021 2021-07-01 NaN
#> 11 2021-07-31 1.97033824 Jul 2021 2021-07-01 NaN
#> 12 2021-08-05 2.33015207 Aug 2021 2021-08-01 1.1670340
#> 13 2021-08-08 2.73092352 Aug 2021 2021-08-01 1.1670340
#> 14 2021-08-13 2.84160623 Aug 2021 2021-08-01 1.1670340
#> 15 2021-08-18 2.28576510 Aug 2021 2021-08-01 1.1670340
#> 16 2021-08-21 4.07267823 Aug 2021 2021-08-01 1.1670340
#> 17 2021-08-22 4.57052871 Aug 2021 2021-08-01 1.1670340
#> 18 2021-08-25 2.60391156 Aug 2021 2021-08-01 1.1670340
#> 19 2021-08-29 3.30526746 Aug 2021 2021-08-01 1.1670340
#> 20 2021-08-31 2.83247605 Aug 2021 2021-08-01 1.1670340
#> 21 2021-09-05 1.76465234 Sep 2021 2021-09-01 2.0205342
#> 22 2021-09-06 1.54667743 Sep 2021 2021-09-01 2.0205342
#> 23 2021-09-10 0.52067298 Sep 2021 2021-09-01 2.0205342
#> 24 2021-09-13 -0.20821825 Sep 2021 2021-09-01 2.0205342
#> 25 2021-09-14 -0.83325752 Sep 2021 2021-09-01 2.0205342
#> 26 2021-09-16 -2.51995083 Sep 2021 2021-09-01 2.0205342
#> 27 2021-09-19 -1.68216378 Sep 2021 2021-09-01 2.0205342
#> 28 2021-09-22 -1.52879067 Sep 2021 2021-09-01 2.0205342
#> 29 2021-09-23 -2.66692760 Sep 2021 2021-09-01 2.0205342
#> 30 2021-09-25 -1.41311268 Sep 2021 2021-09-01 2.0205342
#> 31 2021-09-26 -0.98664846 Sep 2021 2021-09-01 2.0205342
#> 32 2021-09-28 -1.28171994 Sep 2021 2021-09-01 2.0205342
#> 33 2021-09-30 -0.38659428 Sep 2021 2021-09-01 2.0205342
#> 34 2021-10-02 0.49153921 Oct 2021 2021-10-01 0.9313728
#> 35 2021-10-07 1.31312029 Oct 2021 2021-10-01 0.9313728
#> 36 2021-10-11 2.00176054 Oct 2021 2021-10-01 0.9313728
#> 37 2021-10-15 2.55567820 Oct 2021 2021-10-01 0.9313728
#> 38 2021-10-20 2.49376648 Oct 2021 2021-10-01 0.9313728
#> 39 2021-10-24 2.18780382 Oct 2021 2021-10-01 0.9313728
#> 40 2021-10-25 1.80733282 Oct 2021 2021-10-01 0.9313728
#> 41 2021-10-27 1.11262584 Oct 2021 2021-10-01 0.9313728
#> 42 2021-10-28 0.90470856 Oct 2021 2021-10-01 0.9313728
#> 43 2021-10-30 -0.36068779 Oct 2021 2021-10-01 0.9313728
#> 44 2021-11-02 1.80826818 Nov 2021 2021-11-01 1.0521616
#> 45 2021-11-04 3.01623018 Nov 2021 2021-11-01 1.0521616
#> 46 2021-11-07 1.89312159 Nov 2021 2021-11-01 1.0521616
#> 47 2021-11-08 1.49023676 Nov 2021 2021-11-01 1.0521616
#> 48 2021-11-12 1.02358140 Nov 2021 2021-11-01 1.0521616
#> 49 2021-11-14 1.80354652 Nov 2021 2021-11-01 1.0521616
#> 50 2021-11-17 1.72017745 Nov 2021 2021-11-01 1.0521616
#> 51 2021-11-22 1.97349597 Nov 2021 2021-11-01 1.0521616
#> 52 2021-11-27 1.94494921 Nov 2021 2021-11-01 1.0521616
#> 53 2021-11-30 1.90207876 Nov 2021 2021-11-01 1.0521616
#> 54 2021-12-02 3.27068104 Dec 2021 2021-12-01 1.2041252
#> 55 2021-12-07 3.04491005 Dec 2021 2021-12-01 1.2041252
#> 56 2021-12-11 4.56138066 Dec 2021 2021-12-01 1.2041252
#> 57 2021-12-13 3.01262785 Dec 2021 2021-12-01 1.2041252
#> 58 2021-12-14 3.59724160 Dec 2021 2021-12-01 1.2041252
#> 59 2021-12-18 3.72109585 Dec 2021 2021-12-01 1.2041252
#> 60 2021-12-19 3.93703742 Dec 2021 2021-12-01 1.2041252
#> 61 2021-12-23 4.31667690 Dec 2021 2021-12-01 1.2041252
#> 62 2021-12-28 3.81435345 Dec 2021 2021-12-01 1.2041252
#> 63 2022-01-01 3.48114606 Jan 2022 2022-01-01 1.5660426
#> 64 2022-01-03 2.46257068 Jan 2022 2022-01-01 1.5660426
#> 65 2022-01-05 1.39077945 Jan 2022 2022-01-01 1.5660426
#> 66 2022-01-09 1.69430809 Jan 2022 2022-01-01 1.5660426
#> 67 2022-01-12 2.14251787 Jan 2022 2022-01-01 1.5660426
#> 68 2022-01-17 2.19552210 Jan 2022 2022-01-01 1.5660426
#> 69 2022-01-19 3.11778957 Jan 2022 2022-01-01 1.5660426
#> 70 2022-01-22 5.16787425 Jan 2022 2022-01-01 1.5660426
#> 71 2022-01-25 4.67684309 Jan 2022 2022-01-01 1.5660426
#> 72 2022-01-28 2.36767421 Jan 2022 2022-01-01 1.5660426
#> 73 2022-01-29 3.37341274 Jan 2022 2022-01-01 1.5660426
#> 74 2022-01-30 2.66421197 Jan 2022 2022-01-01 1.5660426
#> 75 2022-02-02 1.97620336 Feb 2022 2022-02-01 1.7814769
#> 76 2022-02-06 3.00177473 Feb 2022 2022-02-01 1.7814769
#> 77 2022-02-10 2.71700172 Feb 2022 2022-02-01 1.7814769
#> 78 2022-02-15 1.49628401 Feb 2022 2022-02-01 1.7814769
#> 79 2022-02-17 1.67758749 Feb 2022 2022-02-01 1.7814769
#> 80 2022-02-19 1.53869613 Feb 2022 2022-02-01 1.7814769
#> 81 2022-02-23 1.54446031 Feb 2022 2022-02-01 1.7814769
#> 82 2022-02-25 1.92974071 Feb 2022 2022-02-01 1.7814769
#> 83 2022-02-26 1.55908068 Feb 2022 2022-02-01 1.7814769
#> 84 2022-03-02 2.20345723 Mar 2022 2022-03-01 1.7984352
#> 85 2022-03-05 1.98297067 Mar 2022 2022-03-01 1.7984352
#> 86 2022-03-06 2.31475263 Mar 2022 2022-03-01 1.7984352
#> 87 2022-03-11 3.41159164 Mar 2022 2022-03-01 1.7984352
#> 88 2022-03-14 3.84677313 Mar 2022 2022-03-01 1.7984352
#> 89 2022-03-18 3.52084155 Mar 2022 2022-03-01 1.7984352
#> 90 2022-03-20 4.66964917 Mar 2022 2022-03-01 1.7984352
#> 91 2022-03-25 5.66315302 Mar 2022 2022-03-01 1.7984352
#> 92 2022-03-30 6.21154998 Mar 2022 2022-03-01 1.7984352
#> 93 2022-04-01 6.45028172 Apr 2022 2022-04-01 1.9901615
#> 94 2022-04-03 5.82237564 Apr 2022 2022-04-01 1.9901615
#> 95 2022-04-05 7.18302809 Apr 2022 2022-04-01 1.9901615
#> 96 2022-04-06 6.58276850 Apr 2022 2022-04-01 1.9901615
#> 97 2022-04-09 8.77010150 Apr 2022 2022-04-01 1.9901615
#> 98 2022-04-13 10.30271212 Apr 2022 2022-04-01 1.9901615
#> 99 2022-04-16 10.06701176 Apr 2022 2022-04-01 1.9901615
#> 100 2022-04-19 9.04059086 Apr 2022 2022-04-01 1.9901615
#> 101 2022-04-22 8.33018430 Apr 2022 2022-04-01 1.9901615
#> 102 2022-04-26 8.58706801 Apr 2022 2022-04-01 1.9901615
#> 103 2022-04-30 8.34037613 Apr 2022 2022-04-01 1.9901615
#> 104 2022-05-03 7.99283353 May 2022 2022-05-01 2.6463239
#> 105 2022-05-07 7.04121496 May 2022 2022-05-01 2.6463239
#> 106 2022-05-09 6.99618724 May 2022 2022-05-01 2.6463239
#> 107 2022-05-12 6.21128277 May 2022 2022-05-01 2.6463239
#> 108 2022-05-16 4.54334083 May 2022 2022-05-01 2.6463239
#> 109 2022-05-18 4.16311431 May 2022 2022-05-01 2.6463239
#> 110 2022-05-19 5.08211092 May 2022 2022-05-01 2.6463239
#> 111 2022-05-22 4.50676396 May 2022 2022-05-01 2.6463239
#> 112 2022-05-26 5.11472828 May 2022 2022-05-01 2.6463239
#> 113 2022-05-27 3.49684557 May 2022 2022-05-01 2.6463239
#> 114 2022-05-28 3.44128361 May 2022 2022-05-01 2.6463239
#> 115 2022-06-01 3.96069081 Jun 2022 2022-06-01 2.9049216
#> 116 2022-06-05 4.26184417 Jun 2022 2022-06-01 2.9049216
#> 117 2022-06-10 4.36752037 Jun 2022 2022-06-01 2.9049216
#> 118 2022-06-11 3.72681436 Jun 2022 2022-06-01 2.9049216
#> 119 2022-06-15 2.87711001 Jun 2022 2022-06-01 2.9049216
#> 120 2022-06-20 1.85298122 Jun 2022 2022-06-01 2.9049216
#> 121 2022-06-23 1.97062782 Jun 2022 2022-06-01 2.9049216
#> 122 2022-06-25 1.02315321 Jun 2022 2022-06-01 2.9049216
#> 123 2022-06-30 0.53259576 Jun 2022 2022-06-01 2.9049216
#> 124 2022-07-04 0.27650357 Jul 2022 2022-07-01 2.8921496
#> 125 2022-07-08 2.12036558 Jul 2022 2022-07-01 2.8921496
#> 126 2022-07-09 1.46841567 Jul 2022 2022-07-01 2.8921496
#> 127 2022-07-12 1.70380225 Jul 2022 2022-07-01 2.8921496
#> 128 2022-07-15 1.78176310 Jul 2022 2022-07-01 2.8921496
#> 129 2022-07-18 0.81990646 Jul 2022 2022-07-01 2.8921496
#> 130 2022-07-23 0.74859838 Jul 2022 2022-07-01 2.8921496
#> 131 2022-07-25 2.19314923 Jul 2022 2022-07-01 2.8921496
#> 132 2022-07-30 2.64465329 Jul 2022 2022-07-01 2.8921496
#> 133 2022-08-01 2.68588621 Aug 2022 2022-08-01 2.9475552
#> 134 2022-08-02 2.26338938 Aug 2022 2022-08-01 2.9475552
#> 135 2022-08-06 0.21014215 Aug 2022 2022-08-01 2.9475552
#> 136 2022-08-08 1.34147937 Aug 2022 2022-08-01 2.9475552
#> 137 2022-08-10 -0.11916070 Aug 2022 2022-08-01 2.9475552
#> 138 2022-08-13 0.62078681 Aug 2022 2022-08-01 2.9475552
#> 139 2022-08-18 2.52989038 Aug 2022 2022-08-01 2.9475552
#> 140 2022-08-19 1.08599722 Aug 2022 2022-08-01 2.9475552
#> 141 2022-08-22 1.78778155 Aug 2022 2022-08-01 2.9475552
#> 142 2022-08-25 1.52558406 Aug 2022 2022-08-01 2.9475552
#> 143 2022-08-27 -0.04656010 Aug 2022 2022-08-01 2.9475552
#> 144 2022-09-01 -1.56122775 Sep 2022 2022-09-01 2.7883422
#> 145 2022-09-02 -3.16276392 Sep 2022 2022-09-01 2.7883422
#> 146 2022-09-06 -3.69367045 Sep 2022 2022-09-01 2.7883422
#> 147 2022-09-10 -5.15542603 Sep 2022 2022-09-01 2.7883422
#> 148 2022-09-11 -4.46750926 Sep 2022 2022-09-01 2.7883422
#> 149 2022-09-14 -2.36740032 Sep 2022 2022-09-01 2.7883422
#> 150 2022-09-18 -3.65443079 Sep 2022 2022-09-01 2.7883422
#> 151 2022-09-22 -2.86669195 Sep 2022 2022-09-01 2.7883422
#> 152 2022-09-23 -2.09764971 Sep 2022 2022-09-01 2.7883422
#> 153 2022-09-28 -1.76544713 Sep 2022 2022-09-01 2.7883422
#> 154 2022-10-01 -2.77382373 Oct 2022 2022-10-01 2.6820771
#> 155 2022-10-05 -2.89327634 Oct 2022 2022-10-01 2.6820771
#> 156 2022-10-07 -3.17367168 Oct 2022 2022-10-01 2.6820771
#> 157 2022-10-10 -2.61068214 Oct 2022 2022-10-01 2.6820771
#> 158 2022-10-12 -2.98312090 Oct 2022 2022-10-01 2.6820771
#> 159 2022-10-15 -2.00614751 Oct 2022 2022-10-01 2.6820771
#> 160 2022-10-18 -2.38072837 Oct 2022 2022-10-01 2.6820771
#> 161 2022-10-19 -1.32801690 Oct 2022 2022-10-01 2.6820771
#> 162 2022-10-24 -2.37719391 Oct 2022 2022-10-01 2.6820771
#> 163 2022-10-28 -3.63734916 Oct 2022 2022-10-01 2.6820771
#> 164 2022-11-01 -0.39630922 Nov 2022 2022-11-01 2.3431466
#> 165 2022-11-06 -0.81316681 Nov 2022 2022-11-01 2.3431466
#> 166 2022-11-09 -0.51493922 Nov 2022 2022-11-01 2.3431466
#> 167 2022-11-11 0.12163046 Nov 2022 2022-11-01 2.3431466
#> 168 2022-11-15 -0.36215017 Nov 2022 2022-11-01 2.3431466
#> 169 2022-11-20 0.15471187 Nov 2022 2022-11-01 2.3431466
#> 170 2022-11-22 0.52367640 Nov 2022 2022-11-01 2.3431466
#> 171 2022-11-25 0.30829589 Nov 2022 2022-11-01 2.3431466
#> 172 2022-11-28 0.37358893 Nov 2022 2022-11-01 2.3431466
#> 173 2022-11-29 0.33952167 Nov 2022 2022-11-01 2.3431466
#> 174 2022-12-02 2.46797357 Dec 2022 2022-12-01 2.1861398
#> 175 2022-12-04 1.72663748 Dec 2022 2022-12-01 2.1861398
#> 176 2022-12-07 0.63064121 Dec 2022 2022-12-01 2.1861398
#> 177 2022-12-10 0.66842961 Dec 2022 2022-12-01 2.1861398
#> 178 2022-12-11 0.97891036 Dec 2022 2022-12-01 2.1861398
#> 179 2022-12-13 1.41543384 Dec 2022 2022-12-01 2.1861398
#> 180 2022-12-15 0.95706850 Dec 2022 2022-12-01 2.1861398
#> 181 2022-12-17 -0.10625763 Dec 2022 2022-12-01 2.1861398
#> 182 2022-12-21 1.15692755 Dec 2022 2022-12-01 2.1861398
#> 183 2022-12-22 0.80727716 Dec 2022 2022-12-01 2.1861398
#> 184 2022-12-27 -0.05823570 Dec 2022 2022-12-01 2.1861398
#> 185 2023-01-01 -0.29451527 Jan 2023 2023-01-01 1.9647998
#> 186 2023-01-04 -0.49169117 Jan 2023 2023-01-01 1.9647998
#> 187 2023-01-07 0.61822912 Jan 2023 2023-01-01 1.9647998
#> 188 2023-01-12 0.70296641 Jan 2023 2023-01-01 1.9647998
#> 189 2023-01-13 1.45702020 Jan 2023 2023-01-01 1.9647998
#> 190 2023-01-17 0.95772818 Jan 2023 2023-01-01 1.9647998
#> 191 2023-01-19 1.17217349 Jan 2023 2023-01-01 1.9647998
#> 192 2023-01-24 0.84748758 Jan 2023 2023-01-01 1.9647998
#> 193 2023-01-28 0.94207111 Jan 2023 2023-01-01 1.9647998
#> 194 2023-02-02 0.04670775 Feb 2023 2023-02-01 1.7721209
#> 195 2023-02-03 -1.26409378 Feb 2023 2023-02-01 1.7721209
#> 196 2023-02-05 0.73311960 Feb 2023 2023-02-01 1.7721209
#> 197 2023-02-08 1.33382843 Feb 2023 2023-02-01 1.7721209
#> 198 2023-02-09 0.08255706 Feb 2023 2023-02-01 1.7721209
#> 199 2023-02-10 -0.52860885 Feb 2023 2023-02-01 1.7721209
#> 200 2023-02-13 -1.71408894 Feb 2023 2023-02-01 1.7721209
由 reprex package (v2.0.0)
于 2021-06-29 创建作为滚动平均值的检查,我计算了 excel 中前 123 行的平均值,即 2.8921496
并正确显示在 July 2022
行中。
如评论所述,如果只需要完整的案例-
- 使用参数
.complete = TRUE
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, mean, .before = months(12), .after = months(-1), .complete = T))
Date A Year_Month dummy B
1 2021-07-03 -0.56047565 Jul 2021 2021-07-01 NA
2 2021-07-04 -0.79065314 Jul 2021 2021-07-01 NA
3 2021-07-09 0.76805518 Jul 2021 2021-07-01 NA
4 2021-07-10 0.83856357 Jul 2021 2021-07-01 NA
5 2021-07-14 0.96785130 Jul 2021 2021-07-01 NA
6 2021-07-16 2.68291629 Jul 2021 2021-07-01 NA
7 2021-07-18 3.14383250 Jul 2021 2021-07-01 NA
8 2021-07-22 1.87877126 Jul 2021 2021-07-01 NA
9 2021-07-23 1.19191841 Jul 2021 2021-07-01 NA
10 2021-07-27 0.74625644 Jul 2021 2021-07-01 NA
11 2021-08-01 1.97033824 Aug 2021 2021-08-01 NA
12 2021-08-06 2.33015207 Aug 2021 2021-08-01 NA
13 2021-08-09 2.73092352 Aug 2021 2021-08-01 NA
14 2021-08-14 2.84160623 Aug 2021 2021-08-01 NA
15 2021-08-19 2.28576510 Aug 2021 2021-08-01 NA
16 2021-08-22 4.07267823 Aug 2021 2021-08-01 NA
17 2021-08-23 4.57052871 Aug 2021 2021-08-01 NA
18 2021-08-26 2.60391156 Aug 2021 2021-08-01 NA
19 2021-08-30 3.30526746 Aug 2021 2021-08-01 NA
20 2021-09-01 2.83247605 Sep 2021 2021-09-01 NA
21 2021-09-06 1.76465234 Sep 2021 2021-09-01 NA
22 2021-09-07 1.54667743 Sep 2021 2021-09-01 NA
23 2021-09-11 0.52067298 Sep 2021 2021-09-01 NA
24 2021-09-14 -0.20821825 Sep 2021 2021-09-01 NA
25 2021-09-15 -0.83325752 Sep 2021 2021-09-01 NA
26 2021-09-17 -2.51995083 Sep 2021 2021-09-01 NA
27 2021-09-20 -1.68216378 Sep 2021 2021-09-01 NA
28 2021-09-23 -1.52879067 Sep 2021 2021-09-01 NA
29 2021-09-24 -2.66692760 Sep 2021 2021-09-01 NA
30 2021-09-26 -1.41311268 Sep 2021 2021-09-01 NA
31 2021-09-27 -0.98664846 Sep 2021 2021-09-01 NA
32 2021-09-29 -1.28171994 Sep 2021 2021-09-01 NA
33 2021-10-01 -0.38659428 Oct 2021 2021-10-01 NA
34 2021-10-03 0.49153921 Oct 2021 2021-10-01 NA
35 2021-10-08 1.31312029 Oct 2021 2021-10-01 NA
36 2021-10-12 2.00176054 Oct 2021 2021-10-01 NA
37 2021-10-16 2.55567820 Oct 2021 2021-10-01 NA
38 2021-10-21 2.49376648 Oct 2021 2021-10-01 NA
39 2021-10-25 2.18780382 Oct 2021 2021-10-01 NA
40 2021-10-26 1.80733282 Oct 2021 2021-10-01 NA
41 2021-10-28 1.11262584 Oct 2021 2021-10-01 NA
42 2021-10-29 0.90470856 Oct 2021 2021-10-01 NA
43 2021-10-31 -0.36068779 Oct 2021 2021-10-01 NA
44 2021-11-03 1.80826818 Nov 2021 2021-11-01 NA
45 2021-11-05 3.01623018 Nov 2021 2021-11-01 NA
46 2021-11-08 1.89312159 Nov 2021 2021-11-01 NA
47 2021-11-09 1.49023676 Nov 2021 2021-11-01 NA
48 2021-11-13 1.02358140 Nov 2021 2021-11-01 NA
49 2021-11-15 1.80354652 Nov 2021 2021-11-01 NA
50 2021-11-18 1.72017745 Nov 2021 2021-11-01 NA
51 2021-11-23 1.97349597 Nov 2021 2021-11-01 NA
52 2021-11-28 1.94494921 Nov 2021 2021-11-01 NA
53 2021-12-01 1.90207876 Dec 2021 2021-12-01 NA
54 2021-12-03 3.27068104 Dec 2021 2021-12-01 NA
55 2021-12-08 3.04491005 Dec 2021 2021-12-01 NA
56 2021-12-12 4.56138066 Dec 2021 2021-12-01 NA
57 2021-12-14 3.01262785 Dec 2021 2021-12-01 NA
58 2021-12-15 3.59724160 Dec 2021 2021-12-01 NA
59 2021-12-19 3.72109585 Dec 2021 2021-12-01 NA
60 2021-12-20 3.93703742 Dec 2021 2021-12-01 NA
61 2021-12-24 4.31667690 Dec 2021 2021-12-01 NA
62 2021-12-29 3.81435345 Dec 2021 2021-12-01 NA
63 2022-01-02 3.48114606 Jan 2022 2022-01-01 NA
64 2022-01-04 2.46257068 Jan 2022 2022-01-01 NA
65 2022-01-06 1.39077945 Jan 2022 2022-01-01 NA
66 2022-01-10 1.69430809 Jan 2022 2022-01-01 NA
67 2022-01-13 2.14251787 Jan 2022 2022-01-01 NA
68 2022-01-18 2.19552210 Jan 2022 2022-01-01 NA
69 2022-01-20 3.11778957 Jan 2022 2022-01-01 NA
70 2022-01-23 5.16787425 Jan 2022 2022-01-01 NA
71 2022-01-26 4.67684309 Jan 2022 2022-01-01 NA
72 2022-01-29 2.36767421 Jan 2022 2022-01-01 NA
73 2022-01-30 3.37341274 Jan 2022 2022-01-01 NA
74 2022-01-31 2.66421197 Jan 2022 2022-01-01 NA
75 2022-02-03 1.97620336 Feb 2022 2022-02-01 NA
76 2022-02-07 3.00177473 Feb 2022 2022-02-01 NA
77 2022-02-11 2.71700172 Feb 2022 2022-02-01 NA
78 2022-02-16 1.49628401 Feb 2022 2022-02-01 NA
79 2022-02-18 1.67758749 Feb 2022 2022-02-01 NA
80 2022-02-20 1.53869613 Feb 2022 2022-02-01 NA
81 2022-02-24 1.54446031 Feb 2022 2022-02-01 NA
82 2022-02-26 1.92974071 Feb 2022 2022-02-01 NA
83 2022-02-27 1.55908068 Feb 2022 2022-02-01 NA
84 2022-03-03 2.20345723 Mar 2022 2022-03-01 NA
85 2022-03-06 1.98297067 Mar 2022 2022-03-01 NA
86 2022-03-07 2.31475263 Mar 2022 2022-03-01 NA
87 2022-03-12 3.41159164 Mar 2022 2022-03-01 NA
88 2022-03-15 3.84677313 Mar 2022 2022-03-01 NA
89 2022-03-19 3.52084155 Mar 2022 2022-03-01 NA
90 2022-03-21 4.66964917 Mar 2022 2022-03-01 NA
91 2022-03-26 5.66315302 Mar 2022 2022-03-01 NA
92 2022-03-31 6.21154998 Mar 2022 2022-03-01 NA
93 2022-04-02 6.45028172 Apr 2022 2022-04-01 NA
94 2022-04-04 5.82237564 Apr 2022 2022-04-01 NA
95 2022-04-06 7.18302809 Apr 2022 2022-04-01 NA
96 2022-04-07 6.58276850 Apr 2022 2022-04-01 NA
97 2022-04-10 8.77010150 Apr 2022 2022-04-01 NA
98 2022-04-14 10.30271212 Apr 2022 2022-04-01 NA
99 2022-04-17 10.06701176 Apr 2022 2022-04-01 NA
100 2022-04-20 9.04059086 Apr 2022 2022-04-01 NA
101 2022-04-23 8.33018430 Apr 2022 2022-04-01 NA
102 2022-04-27 8.58706801 Apr 2022 2022-04-01 NA
103 2022-05-01 8.34037613 May 2022 2022-05-01 NA
104 2022-05-04 7.99283353 May 2022 2022-05-01 NA
105 2022-05-08 7.04121496 May 2022 2022-05-01 NA
106 2022-05-10 6.99618724 May 2022 2022-05-01 NA
107 2022-05-13 6.21128277 May 2022 2022-05-01 NA
108 2022-05-17 4.54334083 May 2022 2022-05-01 NA
109 2022-05-19 4.16311431 May 2022 2022-05-01 NA
110 2022-05-20 5.08211092 May 2022 2022-05-01 NA
111 2022-05-23 4.50676396 May 2022 2022-05-01 NA
112 2022-05-27 5.11472828 May 2022 2022-05-01 NA
113 2022-05-28 3.49684557 May 2022 2022-05-01 NA
114 2022-05-29 3.44128361 May 2022 2022-05-01 NA
115 2022-06-02 3.96069081 Jun 2022 2022-06-01 NA
116 2022-06-06 4.26184417 Jun 2022 2022-06-01 NA
117 2022-06-11 4.36752037 Jun 2022 2022-06-01 NA
118 2022-06-12 3.72681436 Jun 2022 2022-06-01 NA
119 2022-06-16 2.87711001 Jun 2022 2022-06-01 NA
120 2022-06-21 1.85298122 Jun 2022 2022-06-01 NA
121 2022-06-24 1.97062782 Jun 2022 2022-06-01 NA
122 2022-06-26 1.02315321 Jun 2022 2022-06-01 NA
123 2022-07-01 0.53259576 Jul 2022 2022-07-01 2.911490
124 2022-07-05 0.27650357 Jul 2022 2022-07-01 2.911490
125 2022-07-09 2.12036558 Jul 2022 2022-07-01 2.911490
126 2022-07-10 1.46841567 Jul 2022 2022-07-01 2.911490
127 2022-07-13 1.70380225 Jul 2022 2022-07-01 2.911490
128 2022-07-16 1.78176310 Jul 2022 2022-07-01 2.911490
129 2022-07-19 0.81990646 Jul 2022 2022-07-01 2.911490
130 2022-07-24 0.74859838 Jul 2022 2022-07-01 2.911490
131 2022-07-26 2.19314923 Jul 2022 2022-07-01 2.911490
132 2022-07-31 2.64465329 Jul 2022 2022-07-01 2.911490
133 2022-08-02 2.68588621 Aug 2022 2022-08-01 2.939545
134 2022-08-03 2.26338938 Aug 2022 2022-08-01 2.939545
135 2022-08-07 0.21014215 Aug 2022 2022-08-01 2.939545
136 2022-08-09 1.34147937 Aug 2022 2022-08-01 2.939545
137 2022-08-11 -0.11916070 Aug 2022 2022-08-01 2.939545
138 2022-08-14 0.62078681 Aug 2022 2022-08-01 2.939545
139 2022-08-19 2.52989038 Aug 2022 2022-08-01 2.939545
140 2022-08-20 1.08599722 Aug 2022 2022-08-01 2.939545
141 2022-08-23 1.78778155 Aug 2022 2022-08-01 2.939545
142 2022-08-26 1.52558406 Aug 2022 2022-08-01 2.939545
143 2022-08-28 -0.04656010 Aug 2022 2022-08-01 2.939545
144 2022-09-02 -1.56122775 Sep 2022 2022-09-01 2.788698
145 2022-09-03 -3.16276392 Sep 2022 2022-09-01 2.788698
146 2022-09-07 -3.69367045 Sep 2022 2022-09-01 2.788698
147 2022-09-11 -5.15542603 Sep 2022 2022-09-01 2.788698
148 2022-09-12 -4.46750926 Sep 2022 2022-09-01 2.788698
149 2022-09-15 -2.36740032 Sep 2022 2022-09-01 2.788698
150 2022-09-19 -3.65443079 Sep 2022 2022-09-01 2.788698
151 2022-09-23 -2.86669195 Sep 2022 2022-09-01 2.788698
152 2022-09-24 -2.09764971 Sep 2022 2022-09-01 2.788698
153 2022-09-29 -1.76544713 Sep 2022 2022-09-01 2.788698
154 2022-10-02 -2.77382373 Oct 2022 2022-10-01 2.656716
155 2022-10-06 -2.89327634 Oct 2022 2022-10-01 2.656716
156 2022-10-08 -3.17367168 Oct 2022 2022-10-01 2.656716
157 2022-10-11 -2.61068214 Oct 2022 2022-10-01 2.656716
158 2022-10-13 -2.98312090 Oct 2022 2022-10-01 2.656716
159 2022-10-16 -2.00614751 Oct 2022 2022-10-01 2.656716
160 2022-10-19 -2.38072837 Oct 2022 2022-10-01 2.656716
161 2022-10-20 -1.32801690 Oct 2022 2022-10-01 2.656716
162 2022-10-25 -2.37719391 Oct 2022 2022-10-01 2.656716
163 2022-10-29 -3.63734916 Oct 2022 2022-10-01 2.656716
164 2022-11-02 -0.39630922 Nov 2022 2022-11-01 2.343147
165 2022-11-07 -0.81316681 Nov 2022 2022-11-01 2.343147
166 2022-11-10 -0.51493922 Nov 2022 2022-11-01 2.343147
167 2022-11-12 0.12163046 Nov 2022 2022-11-01 2.343147
168 2022-11-16 -0.36215017 Nov 2022 2022-11-01 2.343147
169 2022-11-21 0.15471187 Nov 2022 2022-11-01 2.343147
170 2022-11-23 0.52367640 Nov 2022 2022-11-01 2.343147
171 2022-11-26 0.30829589 Nov 2022 2022-11-01 2.343147
172 2022-11-29 0.37358893 Nov 2022 2022-11-01 2.343147
173 2022-11-30 0.33952167 Nov 2022 2022-11-01 2.343147
174 2022-12-03 2.46797357 Dec 2022 2022-12-01 2.183792
175 2022-12-05 1.72663748 Dec 2022 2022-12-01 2.183792
176 2022-12-08 0.63064121 Dec 2022 2022-12-01 2.183792
177 2022-12-11 0.66842961 Dec 2022 2022-12-01 2.183792
178 2022-12-12 0.97891036 Dec 2022 2022-12-01 2.183792
179 2022-12-14 1.41543384 Dec 2022 2022-12-01 2.183792
180 2022-12-16 0.95706850 Dec 2022 2022-12-01 2.183792
181 2022-12-18 -0.10625763 Dec 2022 2022-12-01 2.183792
182 2022-12-22 1.15692755 Dec 2022 2022-12-01 2.183792
183 2022-12-23 0.80727716 Dec 2022 2022-12-01 2.183792
184 2022-12-28 -0.05823570 Dec 2022 2022-12-01 2.183792
185 2023-01-02 -0.29451527 Jan 2023 2023-01-01 1.964800
186 2023-01-05 -0.49169117 Jan 2023 2023-01-01 1.964800
187 2023-01-08 0.61822912 Jan 2023 2023-01-01 1.964800
188 2023-01-13 0.70296641 Jan 2023 2023-01-01 1.964800
189 2023-01-14 1.45702020 Jan 2023 2023-01-01 1.964800
190 2023-01-18 0.95772818 Jan 2023 2023-01-01 1.964800
191 2023-01-20 1.17217349 Jan 2023 2023-01-01 1.964800
192 2023-01-25 0.84748758 Jan 2023 2023-01-01 1.964800
193 2023-01-29 0.94207111 Jan 2023 2023-01-01 1.964800
194 2023-02-03 0.04670775 Feb 2023 2023-02-01 1.772121
195 2023-02-04 -1.26409378 Feb 2023 2023-02-01 1.772121
196 2023-02-06 0.73311960 Feb 2023 2023-02-01 1.772121
197 2023-02-09 1.33382843 Feb 2023 2023-02-01 1.772121
198 2023-02-10 0.08255706 Feb 2023 2023-02-01 1.772121
199 2023-02-11 -0.52860885 Feb 2023 2023-02-01 1.772121
200 2023-02-14 -1.71408894 Feb 2023 2023-02-01 1.772121
如果您想在 slider
中使用自定义函数,您可以在那里使用不可见函数样式。喜欢
data %>%
mutate(dummy = floor_date(Date, 'month'),
B = slide_index_dbl(A, dummy, \(x) mean(x, na.rm=T), .before = months(12), .after = months(-1), .complete = T))