Скользящая сумма последних 12 строк для каждого столбца во фрейме данных в r

У меня есть фрейм данных, который выглядит так: Фрейм данных

В столбцах есть данные только каждый третий месяц. Для всех столбцов, кроме первого, мне нужна текущая сумма для последних 12 строк в новом фрейме данных. Я успешно сделал это, используя цикл for с кодом:

for (j in 2:3537){
 for (i in 10:415){
  EBIT_total[i,j]<-EBIT[i-9,j]+EBIT[i-6,j]+EBIT[i-3,j]+EBIT[i,j]
  Sales_total[i,j]<-Sales[i-9,j]+Sales[i-6,j]+Sales[i-3,j]+Sales[i,j]
}}

Однако это занимает много времени из-за большого количества столбцов.

Я искал в Интернете решение и пытался использовать apply и rollapply (из библиотеки «зоопарк»), но безуспешно.

Я надеюсь, что кто-то сможет помочь, и спасибо заранее!

С уважением Расмус Полезно Бесполезно


person Rasmus    schedule 18.05.2017    source источник


Ответы (1)


Попробуй это:

library(zoo)
DF <- data.frame(a = 1:25, b = 1:25) # test data

rollapplyr(DF, 10, function(x) sum(x[c(1, 4, 7, 10)]), fill = NA)

# or even shorter

rollapplyr(DF, list(c(-9, -6, -3, 0)), sum, fill = NA)
person G. Grothendieck    schedule 18.05.2017