如何在 R 中用分组均值填写 NA 值

How to fill in NA values with grouped means in R

假设我有一个 df 看起来像:

rat  let num
1     A   3 
3     c   12        
3     B   41        
1     B   NA        
1     A   NA    
2     B   2     
2     C   20        
1     C   NA    
2     A   33        
3     C   10

我想 group_by 'rat' 和 'let' 并得到每个组的 'num' 的平均值并用它来填充NA 值

我完成了分组并得到了平均值,但不知道如何应用这些值来填充原始 df 中的 NA 值。不同的方法将不胜感激!谢谢

df %>% group_by(rat,let) %>% summarise(num_avg = mean(num,na.rm=T))

这是一种方法。

df <- df %>% group_by(rat,let) %>% mutate(num_avg = mean(num,na.rm=T))
df$num[is.na(df$num)] <- df$num_avg[is.na(df$num)]

这是 zoo

avena.aggregate 的一个选项
library(zoo)
df$num <- with(df, ave(num, rat, let, FUN = na.aggregate))