我是一个大型数据集,我想计算一列的移动年度总和。它必须是一个确切的年份,所以我不能使用 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 的滚动一年历史总和。
我设法解决它的唯一方法是使用循环和数据框的子集。这不是很有效,我希望有人可以建议我如何使用嵌入功能来计算闰年,因为它要快得多。
使用嵌入函数,只要不是闰年,我就可以使用以下代码。
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
有没有人有更有效的方法来计算基于特定日期而不是天数的移动总和?