Как это?Я не слишком доволен битом three_year_trans = trans + lag(trans, 1) + lag(trans, 2)
, но это лучшее, что у меня получилось.
В случае, если это не очевидно, бит lag(year, 2, default = 0) == year - 2
гарантирует отсутствие пропусковлет (например, если компания XXXX
имела XXXX-1999
, XXXX-2001
, XXXX-2002
, итогов за 2002 год не будет, так как 2000 отсутствует.
library(dplyr)
library(tidyr)
df1 <- data.frame(ID=c('XXXX-1999','XXXX-2000', 'XXXX-2001', 'YYYY-1999',
'YYYY-2000', 'ZZZZ-1999','ZZZZ-2000','ZZZZ-2001', 'ZZZZ-2002'),
trans=c(1,0,2,2,2,4,1,0,3))
df1 %>%
separate(ID, c("company", "year"), "-") %>%
mutate(year = as.integer(year)) %>%
group_by(company) %>%
arrange(year) %>%
mutate(three_years_available = (lag(year, 2, default = 0) == year - 2) + 0,
three_year_trans = if_else(three_years_available == 1,
trans + lag(trans, 1) + lag(trans, 2),
NA_real_)
) %>%
ungroup() %>%
arrange(company, year)