gpt4 book ai didi

r - r 中的分组移动平均线

转载 作者:行者123 更新时间:2023-12-01 10:36:03 25 4
gpt4 key购买 nike

我正在尝试计算 r 中特定字段的移动平均值,但我需要将此移动平均值按两个或多个其他字段分组。这个新平均值的目的是用于预测分析,所以我也需要它是尾随的。任何没有足够值进行平均的变量(例如学生 J)最好给出 NA 或其原始 Score 值。

我一直在尝试 rollapply 和 data.table,但没有成功!

我提供了数据表和两个移动平均线(k=2 的 AVG2 和 k=3 的 AVG3)以准确显示我所追求的结果。移动平均值在分数上,要分组的变量是学校、学生和地区。请帮忙!

   no   school  Student area    Score **AVG2**  **AVG3**
1 I S A 5 NA NA
2 B S A 2 NA NA
3 B S A 7 NA NA
4 B O A 3 NA NA
5 B O B 9 NA NA
6 I O A 6 NA NA
7 I O B 3 NA NA
8 I S A 7 NA NA
9 I O A 1 NA NA
10 B S A 7 4.5 NA
11 I S A 3 NA NA
12 I O A 8 3.5 NA
13 B S A 3 7 5.33
14 I O A 4 4.5 5
15 B O A 1 NA NA
16 I S A 9 5 5
17 B S A 4 5 5.67
18 B O A 6 2 NA
19 I S A 3 6 6.33
20 I O B 8 NA NA
21 B S A 3 3.5 4.67
22 I O A 4 6 4.33
23 B O A 1 3.5 3.33
24 I S A 9 6 5
25 B S A 4 3.5 3.33
26 B O A 6 3.5 2.67
27 I J A 6 NA NA

这是在 r 中重新创建初始表的代码:

school <- c('I','B','B','B','B','I','I','I','I','B','I','I','B','I','B','I','B','B','I','I','B','I','B','I','B','B','I')
Student <- c('S','S','S','O','O','O','O','S','O','S','S','O','S','O','O','S','S','O','S','O','S','O','O','S','S','O','J')
area <- c('A','A','A','A','B','A','B','A','A','A','A','A','A','A','A','A','A','A','A','B','A','A','A','A','A','A','A')
Score <- c(5,2,7,3,9,6,3,7,1,7,3,8,3,4,1,9,4,6,3,8,3,4,1,9,4,6,6)
data.frame(school, Student, area, Score)

最佳答案

您可以尝试使用 dplyrTTR 解决问题,但是对于学校的学生 J I 来说,不可能计算移动平均值,因为只有一个测量值。

使用 stats:filter 计算的 AVG2 给出了您想要的结果,但我还添加了使用 TTR::SMA 计算的 AVG2b 以显示简单的移动平均计算,其中还考虑了当前测量值。

library(dplyr)
library(TTR)

df <- data.frame(school, Student, Score)
df$AVG2 <- NA
df$AVG2b <- NA
df[!(df$school=="I" & df$Student=="J"),] <- df[!(df$school=="I" & df$Student=="J"),] %>%
group_by(school, Student) %>%
mutate(AVG2 = stats::filter(Score, c(0, 0.5, 0.5), sides = 1 ), AVG2b = SMA(Score, n= 2))

> df
school Student Score AVG2 AVG2b
1 I S 5 NA NA
2 B S 2 NA NA
3 B S 7 NA 4.5
4 B O 3 NA NA
5 B O 9 NA 6.0
6 I O 6 NA NA
7 I O 3 NA 4.5
8 I S 7 NA 6.0
9 I O 1 4.5 2.0
10 B S 7 4.5 7.0
...

关于r - r 中的分组移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35249019/

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