gpt4 book ai didi

optimization - 如何在不使用循环的情况下或以更有效的方式计算R中的 "consecutive mean"?

转载 作者:行者123 更新时间:2023-12-01 22:36:46 24 4
gpt4 key购买 nike

我有一组数据,我需要计算它们的“连续平均值”(我不知道它是否是正确的名称,但我找不到更好的东西),这是一个例子:

ID  Var2 Var3    
1 A 1
2 A 3
3 A 5
4 A 7
5 A 9
6 A 11
7 B 2
8 B 4
9 B 6
10 B 8
11 B 10

这里我需要连续计算同一子集中3个Var3变量的平均值(即A将计算出4个平均值:mean(1,3,5),mean(3,5,7),mean( 5,7,9)、mean(7,9,11) 和为 B 计算的 3 个平均值:mean(2,4,6)、mean(4,6,8)、mean(6,8,10)。结果应该是:

ID  Var2 Var3 Mean
1 A 1 N/A
2 A 3 N/A
3 A 5 3
4 A 7 5
5 A 9 7
6 A 11 9
7 B 2 N/A
8 B 4 N/A
9 B 6 4
10 B 8 6
11 B 10 8

目前我正在使用“循环内循环”方法,我使用 Var2 对数据集进行子集化,然后从第三个数据开始计算平均值。

它符合我的需要,但速度很慢,有没有更快的方法解决这个问题?

谢谢!

最佳答案

它通常被称为“滚动平均值”或“运行平均值”。 plyr 包允许您计算数据段上的函数,zoo 包具有滚动计算的方法。

> lines <- "ID,Var2,Var3    
+ 1,A,1
+ 2,A,3
+ 3,A,5
+ 4,A,7
+ 5,A,9
+ 6,A,11
+ 7,B,2
+ 8,B,4
+ 9,B,6
+ 10,B,8
+ 11,B,10"
>
> x <- read.csv(con <- textConnection(lines))
> close(con)
>
> ddply(x,"Var2",function(y) data.frame(y,
+ mean=rollmean(y$Var3,3,na.pad=TRUE,align="right")))
ID Var2 Var3 mean
1 1 A 1 NA
2 2 A 3 NA
3 3 A 5 3
4 4 A 7 5
5 5 A 9 7
6 6 A 11 9
7 7 B 2 NA
8 8 B 4 NA
9 9 B 6 4
10 10 B 8 6
11 11 B 10 8

关于optimization - 如何在不使用循环的情况下或以更有效的方式计算R中的 "consecutive mean"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3437171/

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