У меня есть данные с отсутствующим индексом, например:
df <- data.frame(year = c(2000:2004, 2006), value = c(0:4,6) ^ 2)
# year value
# 1 2000 0
# 2 2001 1
# 3 2002 4
# 4 2003 9
# 5 2004 16
# 6 2006 36
Я хотел бы рассчитать значение отставания для каждого года.Если я использую функцию запаздывания,
library(dplyr)
wrong <- mutate(df, prev = lag(value, order_by = year))
# year value prev
# 1 2000 0 NA
# 2 2001 1 0
# 3 2002 4 1
# 4 2003 9 4
# 5 2004 16 9
# 6 2006 36 16
, это дает запаздывающее значение за 2006 год, несмотря на отсутствие данных за 2005 год. Можно ли получить значение предыдущего года с помощью функции запаздывания?
В настоящее время я знаю, что могу сделать следующее, но это неэффективно и грязно:
right <- df %>% group_by(year) %>%
mutate(prev = ifelse(sum(df$year == year) == 1, df$value[df$year == year-1], NA))
# # A tibble: 6 x 3
# # Groups: year [6]
# year value prev
# <dbl> <dbl> <dbl>
# 1 2000 0 NA
# 2 2001 1.00 0
# 3 2002 4.00 1.00
# 4 2003 9.00 4.00
# 5 2004 16.0 9.00
# 6 2006 36.0 NA