我在R中有一个与此类似的数据集
df
day team data
1 A 5
1 B 2
1 C 1
2 A 2
2 B 3
2 C 1
3 A 0
3 B 2
3 C 1
... ... ...
我现在想根据
day
和 team
有条件地计算数据平均值,并将其添加到数据集中的每一行。平均值应根据团队和所有先前的线路计算,其中日期与线路中的日期相比在一定范围内。该范围应由变量定义。
例如,如果
range <- 2
应按如下方式计算每个团队的平均值:
day team data mean
1 A 5 5
1 B 2 2
1 C 1 1
2 A 2 3.5
2 B 3 2.5
2 C 1 1
3 A 0 1
3 B 2 2.5
3 C 1 1
... ... ... ...
我怎样才能实现这一目标,例如使用
aggregate()
?
如果您需要使用
aggregate
:
n <- 2
aggregate(df, data~team, \(x)rowMeans(embed(c(rep(NA, n-1), x), n), na.rm = TRUE))
team data.1 data.2 data.3
1 A 5.0 3.5 1.0
2 B 2.0 2.5 2.5
3 C 1.0 1.0 1.0