如何在 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
中 ave
和 na.aggregate
的一个选项
library(zoo)
df$num <- with(df, ave(num, rat, let, FUN = na.aggregate))
假设我有一个 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
ave
和 na.aggregate
的一个选项
library(zoo)
df$num <- with(df, ave(num, rat, let, FUN = na.aggregate))