我有一个数据框架,显示日期、项目和值,我要增加一栏,显示其前50个条目(或未有50个条目的NA)的平均数,例如,表格可以是
data
date item value
01/01/01 a 2
01/01/01 b 1.5
04/01/01 c 1.7
05/01/01 a 1.9
......
并成为其中一部分
date item value last_50_mean
........
11/09/01 a 1.2 1.1638
12/09/01 b 1.9 1.5843
12/09/01 a 1.4 1.1621
13/09/01 c 0.9 NA
........
因此在本案中,在2001年9月11日之前的50个条目中a的平均值是1.1638,c在2001年9月13日之前有50个条目,因此返回 NA
我目前正在使用以下函数来做此操作
data[, last_50_mean ] <- sapply(1:nrow(data), function(i){
prevDates <- data[data$date < data$date[i] & data$item == data$item[i], ]
num <- nrow(prevGames)
if(nGames >= 50){
round(mean(prevDates[(num- 49):num, ]$value), 4)
}
}
)
但我的数据框架很大,而且要花很长时间(事实上,我并不100%肯定它仍然在运行中有效......有人知道这样做的最佳方法吗?)