我有一個顯示日期,項目和值的數據框,我想添加一列顯示其先前50個條目的平均值(如果NA沒有50 )例如該表可能是R中最近的50個條目的平均值
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
........
所以在這種情況下,一個在50個條目平均前01年11月9日是1.1638和c一直沒有13/09/01前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%確定它仍然在運行......有沒有人知道這樣做的最佳方式?
'library(xts); ?rollmean'。另請參閱[此處](http://r.789695.n4.nabble.com/Calculating-rolling-mean-by-group-td4280511.html)查看相關問題。最後,請查看[這個問題](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)讓您的問題可重現,以便其他人可以輕鬆地嘗試和幫助您。 – Chase
你是否說你的數據幀很大?試試[這個最近的答案](http://stackoverflow.com/questions/10721180/how-do-i-speed-up-this-for-loop-with-data-table-lapply)。 –