Я большой набор данных, который я хотел бы вычислить движущуюся годовую сумму столбца. Это должен быть точный год, поэтому я не могу использовать rollapply, поскольку он основан на определенном количестве дней, а не на фактических датах.Перемещение суммы на основе дат
В качестве примера я имею следующий код:
dates = seq.Date(as.Date('2006-01-01'),as.Date('2007-12-31'),by='days')
num = 1:length(dates)
y = cbind(ld,num)
ld num
[1,] 13149 1
[2,] 13150 2
[3,] 13151 3
[4,] 13152 4
[5,] 13153 5
[6,] 13154 6
Я хотел бы иметь прокатный один год историческую сумму столбца NUM.
Единственный способ, которым я смог его решить, - это использовать цикл и подмножество фрейма данных. Это не очень эффективно, и я надеялся, что кто-то может посоветовать мне, как учитывать високосные годы, используя функцию embed вместо этого, поскольку это намного быстрее.
Используя функцию embed, у меня есть следующий код, который работает, пока это не високосный год.
b = embed(y[,2],366)
sums = colSums(b)
a = ld[length(dates)-365:length(dates)]
final = cbind(dates = a, rollsum = rev(sums))
head(final)
dates rollsum
[1,] 13513 66795
[2,] 13514 67160
[3,] 13515 67525
[4,] 13516 67890
[5,] 13517 68255
[6,] 13518 68620
У кого-нибудь есть более эффективный способ вычисления движущейся суммы на основе конкретных дат, а не количества дней?