如何用R中的分组平均值填充NA值

时间:2017-03-29 02:17:49

标签: r dplyr tidyr

说我有一个看起来像的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

我想分组'老鼠'和'让'并得到“数字”的平均值对于每个组,并使用它来填写NA值

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

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

2 个答案:

答案 0 :(得分:1)

这是一种方式。

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)]

答案 1 :(得分:1)

以下是来自ave

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