Не видя ваш фрейм данных, я считаю, что это будет работать.
set.seed(7)
# make some fake data
df <- data.frame(Name = rep(as.character(c("A", "B", "C", "D")), 10), Variable = sample(1:100, 40))
# change some to NA
df[which(df$Variable > 40),"Variable"] <- NA
# Fill in NA's for D with the mean of D
df[which(df$Name == "D" & is.na(df$Variable)),"Variable"] <-
mean(df[which(df$Name == "D"),"Variable"], na.rm = TRUE)
Вы также можете перебирать другие «Переменные»
variable_vec <- c("A", "B", "C", "D")
for(i in 1:length(variable_vec)){
df[which(df$Name == i & is.na(df$Variable)),"Variable"] <-
mean(df[which(df$Name == i),"Variable"], na.rm = TRUE)
}