Используйте na.approx
с method = "constant"
(так же, как na.locf
) и rule = 2
(это означает, что ближайшее приближение к ведущим и конечным NA). Если вы хотите, чтобы NAs были линейно интерполированы, удалите аргумент method="constant"
.
df1 %>%
group_by(iso) %>%
mutate_at(vars(-iso), funs(na.approx(., method = "constant", rule = 2))) %>%
ungroup
, давая:
# A tibble: 6 x 5
iso year var1 var2 var3
<fct> <dbl> <dbl> <dbl> <dbl>
1 XXX 2005 165 29 2151
2 XXX 2006 160 21 2139
3 XXX 2007 160 21 2139
4 XXX 2008 184 9 3640
5 XXX 2009 184 9 3640
6 YYY 2005 206 461 8049
df1
в воспроизводимой форме:
df1 <-
structure(list(iso = structure(c(1L, 1L, 1L, 1L, 1L, 2L), .Label = c("XXX",
"YYY"), class = "factor"), year = c(2005L, 2006L, 2007L, 2008L,
2009L, 2005L), var1 = c(165L, 160L, NA, 184L, NA, 206L), var2 = c(29L,
21L, NA, 9L, NA, 461L), var3 = c(2151L, 2139L, NA, 3640L, NA,
8049L)), class = "data.frame", row.names = c("1", "2", "3", "4",
"5", "6"))