library(data.table)
set.seed(123)
d <- data.frame(ID = rep(1:5, each = 17), yearRef = rep(1998:2014, times = 5), y = sample(1:100, 17 * 5))
Для каждого удостоверения личности я хочу получить скользящее среднее значение за 7 лет, равное y
, начиная с 1998 года. Однако условие состоит в том, что в каждом скользящем окне я выбираю только верхние 5 самых высоких значений y, чтобы сделать среднее. Например,
для первого скользящего окна будет
1998-2004 - только среднее из 5 самых высоких значений 'y'
1999-2005 - только среднее5 лучших значений 'y'. .
2007-2013 - только среднее из 5 самых высоких значений 'y'
2008-2014 - только среднее 5 самых высоких значений 'y'
Я заинтересован в использовании data.table для достижения этой цели. Однако также открыты для других предложений. Вот что я попробовал
d = setDT(d)
d[, avg.Y := frollmean(y, 7), by = ID]
Как мне ввести другой аргумент, где для каждого скользящего 7-летнего окна я выбираю только верхнее 5 наибольшее значение y для вычисления среднего значения?
EDIT
У меня также может быть случай, когда некоторые идентификаторы могут иметь минимум 7 лет данных для создания скользящего среднего, и в этом случае вышеуказанная функция даст мне NA. Для этих идентификаторов можно просто взять среднее арифметическое? Например, если идентификатор имеет данные за 1998-2002 гг., В таких случаях я могу просто взять среднее значение y
с 1998-2002