Это можно сделать с помощью пакета dplyr
.
my_data <- tibble::tribble(
~year, ~id, ~V1, ~V2,
2000, "AA", NA, NA,
2001, "AA", NA, NA,
2002, "AA", 2, 2,
2003, "AA", 3, 3,
2000, "BB", 4, 4,
2001, "BB", NA, NA,
2002, "BB", 3, 3,
2003, "BB", NA, NA,
2000, "CC", 2, 2,
2001, "CC", 3, NA,
2002, "CC", 3, 3,
2003, "CC", NA, NA,
2000, "DD", NA, 4,
2001, "DD", NA, 2,
2002, "DD", NA, NA,
2003, "DD", NA, NA
)
library(dplyr)
my_data <- my_data %>% group_by(year, id) %>% mutate(avg = mean(V1, na.rm=T))
my_data$V1[is.na(my_data$V1)] <- my_data$avg[is.na(my_data$V1)]