Я пытаюсь написать код, который создает новый столбец со скользящими средними на основе 'year', где количество строк для каждого года является переменной, где каждый год имеет только одно уникальное значение, повторяющееся для каждой строки этого года. Я хочу рассчитать скользящие средние на основе этих уникальных значений независимо от количества строк в году.
Просто к вашему сведению;Я очень плохо знаком с R и программированием, поэтому, если я что-то упустил, чтобы вы поняли мою проблему, пожалуйста, дайте мне знать.
Например, тип данных, с которыми я работаю, выглядит следующим образом:
df <- data.frame(year = c(1702, 1702, 1702, 1702, 1702, 1703, 1703, 1703, 1704, 1704, 1705, 1705, 1705, 1705, 1706, 1706, 1707, 1707, 1707, 1708, 1708, 1708, 1708, 1708, 1709, 1709, 1709, 1709, 1709), avgtemp = c(5.3, 5.3, 5.3, 5.3, 5.3, 3.9, 3.9, 3.9, 6.12, 6.12, 4.16, 4.16, 4.16, 4.16, 5.65, 5.65, 3.11, 3.11, 3.11, 5.17, 5.17, 5.17, 5.17, 5.17, 4.75, 4.75, 4.75, 4.75, 4.75))
Я нашел этот пост, Скользящее среднее по уникальной дате с несколькими наблюдениями за датой , и попробовал решение, предложенное там Марком Петерсоном, но оно не работает для меня.
Я пробовал следующий код.
rolledavg <-
df %>%
group_by(year) %>%
summarise(rollavg = mean(avgtemp)) %>%
ungroup() %>%
arrange(year) %>%
mutate( ma3temp = rollapply(rollavg
, 3
, mean
, align= "right"
, partial=T
, fill = NA))
Я получаю следующую ошибку: «Ошибка в порядке (год): аргумент 1 не является вектором».
Ожидаемый результат должен быть примерно таким:
ожидаемый результат df
Буду признателен за любую помощь, которую смогу получить. Не против работать с другими пакетами / решениями, отличными от предложенных выше.