根据R中的类别用另一个变量的平均值填充缺失值

Fill missing value with mean of another variable based on categories in R

我想用对应于 ID 列的 val 的平均值替换每一行中 val2 中的 NA 值。有什么简单的(tidyverse)方法可以做到这一点吗?

此外,我想知道如何用 val2 中的 mean(na.rm=TRUE) 值本身替换它 (例如:第 6 行和第 9 行val2 将替换为 4, mean(na.rm=TRUE) of val2 (for ID==c))

对于此图像中的数据框:

R代码:

df <- data.frame(ID=c("a","b","c","a","b","c","a","b","c"),
                 val=c(seq(1:9)), val2=c(1,2,4,NA,5,NA,7,NA,NA))

自己找到答案,如果有比这更好的答案建议,请分享

df %>% 
group_by(ID) %>% 
mutate(val2 = ifelse(is.na (val2), mean(val), val2))

点数

df %>% 
group_by(ID) %>% 
mutate(val2 = ifelse(is.na(val2), mean(val2,na.rm=TRUE), val2))