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

时间:2014-02-16 04:59:18

标签: r mean

x<-c("A","B")
y<-c(1:10)
dat<-expand.grid(visit=y,site=x)

我想获得一个列,该列具有访问每个站点中前面行的平均值。第一次访问没有价值。

返回数据的示例

 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 个答案:

答案 0 :(得分:1)

使用y = 1:6来匹配问题中的示例。

您可以使用bycumsum获取移动平均线:

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

您可以使用unlist

轻松地将这些内容显示在一个列中
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