【发布时间】:2020-08-31 16:07:18
【问题描述】:
我正在努力获得前 n 个值的标准偏差。或者在我的情况下是过去 5 天。
我以下面的代码为例:
df<- data.frame(date = seq(as.Date("2019-12-01"), as.Date("2020-03-31"), by="days"),
TRM= runif(122, min=3500, max=4100))
> df
date TRM
1 2019-12-01 3540.028
2 2019-12-02 3673.536
3 2019-12-03 3827.182
4 2019-12-04 3824.791
5 2019-12-05 3906.753
6 2019-12-06 3528.100
7 2019-12-07 3650.191
# ... with more rows
然后我用mutate添加一些我需要的信息,我会告诉你最后几行:
df<-mutate(df, diferencia = TRM - lag(TRM, 1),
VAR=diferencia/lag(TRM, 1))
>df
date TRM diferencia VAR
118 2020-03-27 3779.479 -262.366328 -0.064912515
119 2020-03-28 3773.771 -5.708207 -0.001510316
120 2020-03-29 4097.078 323.307069 0.085672159
121 2020-03-30 3752.619 -344.459061 -0.084074332
122 2020-03-31 3707.442 -45.176979 -0.012038788
所以我需要的是以下内容:
- 为列“VAR”创建一个包含
sd的列。 - 每行的
sd必须仅包含“VAR”列的最后 5 天。 - 如果这一切都可以用
dply完成,那就太好了。 (没必要)
例如,对于第 122 行,结果将是:
> sd(df[118:122,4])
[1] 0.06630885
所以我得到的是我的df 的所有行的这个值,我以 5 天为例,但我想修改范围:
date TRM diferencia VAR diff5days
118 2020-03-27 3779.479 -262.366328 -0.064912515 0.05801765
119 2020-03-28 3773.771 -5.708207 -0.001510316 0.04799908
120 2020-03-29 4097.078 323.307069 0.085672159 0.06207932
121 2020-03-30 3752.619 -344.459061 -0.084074332 0.07522609
122 2020-03-31 3707.442 -45.176979 -0.012038788 0.06630885
【问题讨论】: