Optimization 如何计算;“连续平均值”;在R中不使用循环,还是以更有效的方式?

Optimization 如何计算;“连续平均值”;在R中不使用循环,还是以更有效的方式?,optimization,r,loops,Optimization,R,Loops,我有一组数据,我需要计算它们的“连续平均值”(我不知道它是否是正确的名称,但我找不到更好的名称),下面是一个示例: 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个平均值

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

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个平均值:平均值(1,3,5)、平均值(3,5,7)、平均值(5,7,9)、平均值(7,9,11)和为B计算的3个平均值:平均值(2,4,6)、平均值(4,6,8)、平均值(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
>行
>x
>ddply(x,“Var2”,函数(y)数据帧(y,
+平均值=平均值(y$Var3,3,na.pad=TRUE,align=“right”))
ID Var2 Var3平均值
1 A 1 NA
2 A 3 NA
3 3 A 5 3
4 A 7 5
5 5 A 9 7
61119
7 B 2 NA
8B4NA
9 B 6 4
10 10 B 8 6
11 11 B 10 8

交替使用基本R

x$mean <- unlist(tapply(x$Var3, x$Var2, zoo::rollmean, k=3, na.pad=TRUE, align="right", simplity=FALSE))

x$表示感谢!但是如果var3没有订购(它们应该按ID订购)?然后按
ID
订购
x
首先:
x