gpt4 book ai didi

r - 提前n天计算滚动平均值

转载 作者:行者123 更新时间:2023-12-02 07:57:32 26 4
gpt4 key购买 nike

我有以下数据集:

date <- StockData[1:10,2]
x <- c(2,4,2,3,5,1,6,2,3,4)
df <- as.data.frame(cbind(x,date))
df

x date
1 2 2019-06-28
2 4 2019-07-01
3 2 2019-07-02
4 3 2019-07-03
5 5 2019-07-04
6 1 2019-07-05
7 6 2019-07-08
8 2 2019-07-09
9 3 2019-07-10
10 4 2019-07-11

现在我想创建一个新列,其中包含提前 5 (n) 天的滚动平均值,因此数据集如下所示:

   x       date five.day.average
1 2 2019-06-28 3.2
2 4 2019-07-01 3
3 2 2019-07-02 3.4
4 3 2019-07-03 3.4
5 5 2019-07-04 3.4
6 1 2019-07-05 3.2
7 6 2019-07-08 NA
8 2 2019-07-09 NA
9 3 2019-07-10 NA
10 4 2019-07-11 NA

换句话说,我想要一个公式/函数,它与 zoo 包中的 rollmean 做同样的事情,但不是回到过去,而是回到过去(因为rollmean 中的k 不能为负数)。

提前致谢!

最佳答案

一个选项是 data.table 中的 frollmean

library(data.table)
setDT(df)[, five.day.average := frollmean(x, 5, align = 'left')]
df
# x date five.day.average
# 1: 2 2019-06-28 3.2
# 2: 4 2019-07-01 3.0
# 3: 2 2019-07-02 3.4
# 4: 3 2019-07-03 3.4
# 5: 5 2019-07-04 3.4
# 6: 1 2019-07-05 3.2
# 7: 6 2019-07-08 NA
# 8: 2 2019-07-09 NA
# 9: 3 2019-07-10 NA
#10: 4 2019-07-11 NA

或者使用 zoo 中的 rollmean

rollmean(df$x, 5, align = 'left', fill = NA)
#[1] 3.2 3.0 3.4 3.4 3.4 3.2 NA NA NA NA

数据

df <- structure(list(x = c(2L, 4L, 2L, 3L, 5L, 1L, 6L, 2L, 3L, 4L), 
date = c("2019-06-28", "2019-07-01", "2019-07-02", "2019-07-03",
"2019-07-04", "2019-07-05", "2019-07-08", "2019-07-09", "2019-07-10",
"2019-07-11")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))

关于r - 提前n天计算滚动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61762027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com