R使用ifelse将is.na替换为条件平均值/中位数/众数

时间:2018-08-15 21:37:52

标签: r if-statement conditional

我有两列“性别”和“年龄”,其中“性别”对于男性是1,对于女性是2。年龄大概是介于0.5到90之间的数字,NA散落在周围。

如何运行一个ifelse公式,以便当该相应单元格的年龄为NA时,我可以填写男性和类似女性的平均年龄?

enter image description here

如何修改代码以帮助解决此问题?当前代码:

dataset$Age = ifelse(is.na(dataset$Age),
                 ave(dataset$Age, FUN = function(x) mean(x, na.rm = TRUE)),
                 dataset$Age)

我希望在NA空间中输入男性和女性的平均值。

谢谢您的提前帮助。

1 个答案:

答案 0 :(得分:0)

根据评论进行了编辑:

我可以通过2个步骤解决此问题:
 -首先使用汇总来按性别查找平均年龄
 -然后使用ifelse

library(dplyr)
df_agg <- df %>% group_by(gender) %>% summarise(Age = mean(age, na.rm = TRUE))
male_avg <- df_agg$Age[df_agg$gender == 1]
female_avg <- df_agg$Age[df_agg$gender == 2]

df$age <- ifelse(is.na(df$age), ifelse(df$gender == 1, male_avg, female_avg), df$age)