R语言mutate中replace替换-1为均值时全列被替换问题求助
解决数值列特定值替换问题:将HRS1列的-1替换为列均值
为什么之前的方法失效?
str_replace是stringr包的字符串处理函数,你的HRS1是数值型列,用它会把数值转成字符串操作,完全不匹配需求。- 使用
replace时全列替换成均值,是因为没正确指定替换位置。replace(x, positions, value)里的positions需要明确给出要替换的元素索引或逻辑条件,若写得不对(比如直接传TRUE),就会替换所有元素。
正确实现方法
方法1:dplyr::case_when(可读性最高,推荐)
library(dplyr) df_survey <- df_survey %>% mutate(HRS1 = case_when( HRS1 == -1 ~ mean(HRS1[HRS1 != -1], na.rm = TRUE), # 计算排除-1后的列均值 TRUE ~ HRS1 # 其他值保持原样 ))
方法2:基础R的ifelse
# 先算出排除-1后的均值 hrs_avg <- mean(df_survey$HRS1[df_survey$HRS1 != -1], na.rm = TRUE) # 用ifelse做条件替换 df_survey$HRS1 <- ifelse(df_survey$HRS1 == -1, hrs_avg, df_survey$HRS1)
方法3:正确使用replace函数
hrs_avg <- mean(df_survey$HRS1[df_survey$HRS1 != -1], na.rm = TRUE) # 明确指定替换位置:HRS1等于-1的元素 df_survey$HRS1 <- replace(df_survey$HRS1, df_survey$HRS1 == -1, hrs_avg)
注意:计算均值时一定要排除-1,否则会把无效值纳入计算,得到错误的均值。
内容的提问来源于stack exchange,提问作者Data Science Analytics Manager
相关产品推荐
相关产品推荐

