Используя ввод DF
, воспроизводимый в примечании в конце, определите функцию roll
, которая суммирует предыдущие 5 строк и использует ave
для ее запуска для каждой страны.Аргумент ширины от list(-seq(5))
до rollapplyr
означает использование смещений -1, -2, -3, -4, -5 при суммировании, то есть значений в предыдущих 5 строках.
Вопрос не обсуждалсячто делать с начальными строками в каждой стране, поэтому мы добавляем значения NA, но если вам нужны частичные суммы, добавьте аргумент partial = TRUE
к rollapplyr
.Вы также можете изменить fill=NA
на другое значение, если хотите, чтобы оно было достаточно гибким.
library(zoo)
roll <- function(x) rollapplyr(x, list(-seq(5)), sum, fill = NA)
transform(DF, Lag5 = ave(Aid, Country, FUN = roll))
Примечание
Предполагалось, что ввод будет следующим.Мы добавили вторую страну.
Lines <- "Country Year Aid
Angola 1995 416420000
Angola 1996 459310000
Angola 1997 354660000
Angola 1998 335270000
Angola 1999 387540000
Angola 2000 302210000"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE,
colClasses = c("character", "integer", "numeric"))
DF <- rbind(DF, transform(DF, Country = "Belize"))