在R中筛选Title列后用指定范围随机值替换Age列NA值的问题
解决Titanic数据中Mr.群体Age列NA值替换为不同随机值的问题
问题根源
你的代码中runif(1, min=14, max=57)仅在执行mutate时生成单个随机数,所有NA值都会被替换为这个固定值,而非每个NA对应独立的随机数。
解决办法
以下两种方案都能实现每个NA值替换为14-57之间的独立随机数:
方案1:使用if_else逐行判断生成随机数
利用dplyr的if_else函数,逐行检查Age是否为NA,若是则生成新的随机数,否则保留原值。runif(n(), 14, 57)会生成与当前数据框行数一致的随机数向量,if_else自动匹配位置完成替换:
titanic_df4 <- titanic_df3 %>% filter(Title == 'Mr.') %>% mutate(Age = if_else(is.na(Age), runif(n(), min = 14, max = 57), Age))
方案2:使用case_when分支处理
通过case_when设定分支逻辑,当Age为NA时生成单个随机数(每次触发分支都会重新生成),非NA时保留原值:
titanic_df4 <- titanic_df3 %>% filter(Title == 'Mr.') %>% mutate(Age = case_when( is.na(Age) ~ runif(1, min = 14, max = 57), TRUE ~ Age ))
内容的提问来源于stack exchange,提问作者Nasim Al Goni Shourav
相关产品推荐
相关产品推荐

