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