У меня есть серия ежегодных подсчетов инцидентов для каждой категории без каких-либо строк в течение лет, в которых категория не увидела инцидент. Я хотел бы добавить столбец, который показывает за каждый год, сколько инцидентов произошло за предыдущие три года.Подвижная сумма по неуравновешенному временному ряду
Один из способов управления этим состоит в том, чтобы добавить пустые строки за все годы с нулевыми инцидентами, а затем использовать rollapply()
с выровненным слева четырехлетним окном, но это расширит мой набор данных больше, чем я хочу. Конечно, есть способ использовать ddply()
и transform
для этого?
Следующие две строки кода построить фиктивный набор данных, а затем выполнить простую plyr
сумму по категориям:
dat <- data.frame(
category=c(rep('A',6), rep('B',6), rep('C',6)),
year=rep(c(2000,2001,2004,2005,2009, 2010),3),
incidents=rpois(18, 3)
)
ddply(dat, .(category) , transform, i_per_c=sum(incidents))
Это работает, но это только показывает, в общей сложности в-категории.
Я хочу, чтобы общее количество зависело от года.
Так я пытаюсь расширить ddply()
вызов с синтаксисом function()
, например, так:
ddply(dat, .(category) , transform,
function(x) i_per_c=sum(ifelse(x$year >= year - 4 & x$year < year, x$incidents, 0))
)
Это просто возвращает исходный кадр данных, без изменений.
Я должен что-то пропустить в синтаксисе plyr
, но я не знаю, что это такое.
Спасибо, Matt
Harlan, спасибо. Похоже, что это может сработать, но где именно qq? –
Ой, мой плохой. Имела временную переменную от тестирования. Исправлена. – Harlan
Спасибо. Это остается лучшим решением, с которым я столкнулся. –