R:计算前一行和组内的平均值

R:计算前一行和组内的平均值,r,mean,R,Mean,为此使用y=1:6,以匹配问题中的示例 您可以通过by和cumsum获得运行平均值: visit site mean 1 A 2 A 1 3 A 1.5 4 A 2 5 A 2.5 6 A 3 1 B etc.. 这些几乎就是你想要的。您希望将它们移动1,而不希望最后一个条目。这很容易做到(如果要求有点奇怪的话) 您可以使用unlist轻松地在一列中显示这些内容

为此使用
y=1:6
,以匹配问题中的示例

您可以通过
by
cumsum
获得运行平均值:

 visit site  mean
   1    A      
   2    A     1
   3    A   1.5
   4    A     2
   5    A   2.5
   6    A     3
   1    B  etc..
这些几乎就是你想要的。您希望将它们移动1,而不希望最后一个条目。这很容易做到(如果要求有点奇怪的话)

您可以使用
unlist
轻松地在一列中显示这些内容:

with(dat, by(visit, site, FUN=function(x) c(NA, head(cumsum(x)/1:length(x), -1))))
## site: A
## [1]  NA 1.0 1.5 2.0 2.5 3.0
## ----------------------------------------------------------------------------------------------------- 
## site: B
## [1]  NA 1.0 1.5 2.0 2.5 3.0

dat$表示返回数据的示例意味着
y=1:6
with(dat, by(visit, site, FUN=function(x) cumsum(x)/1:length(x)))
## site: A
## [1] 1.0 1.5 2.0 2.5 3.0 3.5
## ----------------------------------------------------------------------------------------------------- 
## site: B
## [1] 1.0 1.5 2.0 2.5 3.0 3.5
with(dat, by(visit, site, FUN=function(x) c(NA, head(cumsum(x)/1:length(x), -1))))
## site: A
## [1]  NA 1.0 1.5 2.0 2.5 3.0
## ----------------------------------------------------------------------------------------------------- 
## site: B
## [1]  NA 1.0 1.5 2.0 2.5 3.0
dat$mean <- unlist(with(dat, by(visit, site, FUN=function(x) c(NA, head(cumsum(x)/1:length(x), -1)))))
dat
##    visit site mean
## 1      1    A   NA
## 2      2    A  1.0
## 3      3    A  1.5
## 4      4    A  2.0
## 5      5    A  2.5
## 6      6    A  3.0
## 7      1    B   NA
## 8      2    B  1.0
## 9      3    B  1.5
## 10     4    B  2.0
## 11     5    B  2.5
## 12     6    B  3.0