gpt4 book ai didi

r - 使用 rollapply 和 zoo 计算一列变量的滚动平均值

转载 作者:行者123 更新时间:2023-12-03 12:35:26 34 4
gpt4 key购买 nike

我想计算“sp”列中所有变量的滚动平均值。这是我的数据示例:

the_date    sp  wins
01-06--2012 1 305
02-06--2012 1 276
03-06--2012 1 184
04-06--2012 1 248
05-06--2012 1 243
06-06--2012 1 363
07-06--2012 1 272
01-06--2012 2 432
02-06--2012 2 369
03-06--2012 2 302
04-06--2012 2 347
05-06--2012 2 357
06-06--2012 2 331
07-06--2012 2 380
01-06--2012 3 1
02-06--2012 3 2
03-06--2012 3 3
04-06--2012 3 2
05-06--2012 3 0
06-06--2012 3 2
07-06--2012 3 0

我想要的是在数据中添加一列,为每个 sp 提供超过 3 天的移动平均值。所以以下输出是我想要的:
the_date    sp  wins    SMA_wins
01-06--2012 1 305 305.00
02-06--2012 1 276 290.50
03-06--2012 1 184 255.00
04-06--2012 1 248 236.00
05-06--2012 1 243 225.00
06-06--2012 1 363 284.67
07-06--2012 1 272 292.67
01-06--2012 2 432 432.00
02-06--2012 2 369 400.50
03-06--2012 2 302 367.67
04-06--2012 2 347 339.33
05-06--2012 2 357 335.33
06-06--2012 2 331 345.00
07-06--2012 2 380 356.00
01-06--2012 3 1 1.00
02-06--2012 3 2 1.50
03-06--2012 3 3 2.00
04-06--2012 3 2 2.33
05-06--2012 3 0 1.67
06-06--2012 3 2 1.33
07-06--2012 3 0 0.67

我正在使用rollapply。
df <- group_by(df, sp)
df_zoo <- zoo(df$wins, df$the_date)
mutate(df, SMA_wins=rollapplyr(df_zoo, 3, mean, align="right", partial=TRUE))

如果我在特定的 sp 上过滤我的数据,它会完美运行。

当我按 sp 分组时如何使这项工作?

谢谢

最佳答案

你可以这样做:

library(dplyr)
library(zoo)

df %>% group_by(sp) %>%
mutate(SMA_wins=rollapplyr(wins, 3, mean, partial=TRUE))

看起来您使用了 dfdf_zoo在您的 mutate电话把事情搞砸了。

关于r - 使用 rollapply 和 zoo 计算一列变量的滚动平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769770/

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