2017-03-29 42 views
0

說我有一個DF,看起來像:如何在NA填充中的R分組方式值

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「老鼠」和「讓」,讓「民的平均'爲每個組,並用它來填寫NA值

我已經完成了分組,並得到了意思,但不知道如何應用這些值來填充我原始df中的NA值。不同的方法將不勝感激!謝謝。

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

如果您計劃任何進一步的統計數據不要這樣做。 –

+0

我剛開始學習R,這個例子只是學習不同編碼方法的一種手段。 – Ricky

回答

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

如果需要,使用組平均值填充NA可以用一行來實現:'df%>% group_by(rat,let)%>% mutate(num = ifelse(is.na(num),mean(num ,na.rm = TRUE),num))' – www

1

這裏是avena.aggregate一個選項從zoo

library(zoo) 
df$num <- with(df, ave(num, rat, let, FUN = na.aggregate))