日付、アイテム、値を示すデータフレームがあり、以前の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
........
したがって、この場合、11/09/01より前の50エントリのaの平均は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%動作するかどうかはわかりません...これを行うための最良の方法を知っている人はいますか?