You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言case_when填充NA值出错:基于性别与体长更新性成熟列

解决Sexual.Maturity列的NA填充问题

问题根源

  • 用==NA判断缺失值,R中必须用is.na()来检测NA;
  • 原代码最后TRUE ~ NA_character_会把所有非匹配行(包括已有有效值的行)都改成NA,导致整列变NA或覆盖已有值;
  • 第二次修改错误地把逻辑与&换成了逻辑或|,完全打乱判断逻辑,导致正常数据被覆盖。

dplyr修正方案

保留原有有效值,仅填充NA的行:

data <- data %>%
  mutate(Sexual.Maturity = case_when(
    # 仅处理Sexual.Maturity为NA的行
    is.na(Sexual.Maturity) & Sex == "M" & Length >= 206.49 ~ "Mature",
    is.na(Sexual.Maturity) & Sex == "M" & Length < 206.49 ~ "Immature",
    is.na(Sexual.Maturity) & Sex == "F" & Length >= 188.8 ~ "Mature",
    is.na(Sexual.Maturity) & Sex == "F" & Length < 188.8 ~ "Immature",
    # 所有非NA的行,保留原有值
    TRUE ~ Sexual.Maturity
  ))

R Base实现方案

用逻辑索引定位需要填充的行,避免覆盖已有数据:

# 处理雄性且Sexual.Maturity为NA的行
male_na <- is.na(data$Sexual.Maturity) & data$Sex == "M"
data$Sexual.Maturity[male_na & data$Length >= 206.49] <- "Mature"
data$Sexual.Maturity[male_na & data$Length < 206.49] <- "Immature"

# 处理雌性且Sexual.Maturity为NA的行
female_na <- is.na(data$Sexual.Maturity) & data$Sex == "F"
data$Sexual.Maturity[female_na & data$Length >= 188.8] <- "Mature"
data$Sexual.Maturity[female_na & data$Length < 188.8] <- "Immature"

内容的提问来源于stack exchange,提问作者Sofia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:33:30