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

含公式与NA值的R语言case_when函数使用问题

问题与解决方案

问题背景

数据包含三列核心字段:

  • EX1:支付金额
  • EX2:周期类型(取值为week或month)
  • EX3:支付周期数

存在数据质量问题:部分行的EX1、EX3为NA但EX2非NA,需先清理;同时要计算年度总支付额存入新列EX,并将EX2的NA值转为0用于后续计算。

原始数据示例:

EX1 EX2   EX3
20  week  1
100 week  2
400 month 5
100 month 1
NA  NA    NA
NA  NA    NA
40  week  2

原始代码存在两处问题:计算月度年度支付额时误用了待创建的EX列;处理EX2 NA值的时机不合理。

修正后的代码

data %>%
  # 先将EX2的NA值转为"0"
  mutate(EX2 = if_else(is.na(EX2), "0", EX2)) %>%
  # 过滤掉EX1、EX3为NA的异常行
  drop_na(EX1, EX3) %>%
  # 计算年度总支付额
  mutate(EX = case_when(
    EX2 == "week" ~ (EX1 / EX3) * 52,
    EX2 == "month" ~ (EX1 / EX3) * 12,
    TRUE ~ 0
  ))

关键说明

  1. NA值处理顺序:先把EX2的NA转为"0",再执行drop_na过滤EX1/EX3的NA行,既保留了EX2有效但EX1/EX3异常的行过滤逻辑,又完成了EX2 NA转0的需求
  2. 月度计算逻辑修正:月度周期的年度支付额应为(单周期金额) * 12,单周期金额是EX1/EX3,原始代码中的12/52是月度转周度的系数,不符合年度计算逻辑
  3. 默认值兜底:当EX2为"0"或其他异常值时,EX列赋值为0,满足后续计算需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:06:24