У меня есть ряд ежегодных подсчетов инцидентов для каждой категории, без строк для лет, в которых категория не видела инцидента.Я хотел бы добавить столбец, который показывает для каждого года, сколько инцидентов произошло за предыдущие три года.
Один из способов справиться с этим - добавить пустые строки для всех лет с нулевым числом инцидентов, а затем использовать 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
, но я не знаю, что это такое.
Спасибо, Мэтт