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

使用case_when构建特定哑变量时代码报错,求解决方法

分组创建哑变量的case_when报错解决

需求说明

按NCLP分组生成哑变量dummy_data,规则如下:

  • 若分组内Data_Fine_Effettiva存在非缺失值,仅该变量最大值对应的观测赋值为1
  • 若分组内Data_Fine_Effettiva全缺失,且Data_Inizio_Effettiva的最大值非缺失且小于阈值my_date,则该最大值对应的观测赋值为1
  • 其余情况赋值为0

示例数据

示例数据

报错代码

df <- df%>%
  mutate(
    .by = NCLP, 
    dummy_data = case_when(
      any(!is.na(Data_Fine_Effettiva)) & Data_Fine_Effettiva == max(Data_Fine_Effettiva, na.rm = TRUE) ~ 1,
      all(is.na(Data_Fine_Effettiva))  & !is.na(lag(Data_Inizio_Effettiva)) & Data_Inizio_Effettiva == max(Data_Inizio_Effettiva) & Data_Inizio_Effettiva < my_date ~ 1,
      .default=0)) %>%

错误信息(翻译后)

Error in `mutate_cols()`:
! `mutate()`创建列`dummy_data`时出现问题。
i `dummy_data = case_when(...)`.
x 第3个条件(`any(!is.na(Data_Fine_Effettiva)) & Data_Fine_Effettiva == max(Data_Fine_Effettiva, na...`)必须是双向公式,不能是双精度向量。
由`abort_case_when_formula()`引发的错误:
! 第3个条件(`any(!is.na(Data_Fine_Effettiva)) & Data_Fine_Effettiva == max(Data_Fine_Effettiva, na...`)必须是双向公式,不能是双精度向量。

解决方法及修正代码

错误原因

  1. 第二个条件中max(Data_Inizio_Effettiva)未添加na.rm=TRUE,分组内存在缺失值时会返回NA,导致条件逻辑向量出现无效值,触发dplyr语法检查报错
  2. lag(Data_Inizio_Effettiva)疑似笔误,不符合需求中“取Data_Inizio_Effettiva最大值”的描述
  3. 代码末尾多余的%>%属于语法不规范,需移除

修正后代码

# 先确保my_date为日期格式,示例:my_date <- as.Date("2023-01-01")
df <- df %>%
  mutate(
    .by = NCLP, 
    dummy_data = case_when(
      # 规则1:Data_Fine_Effettiva存在非缺失值时,最大值对应行赋值1
      any(!is.na(Data_Fine_Effettiva)) & Data_Fine_Effettiva == max(Data_Fine_Effettiva, na.rm = TRUE) ~ 1,
      # 规则2:Data_Fine_Effettiva全缺失时,Data_Inizio_Effettiva最大值非缺失且小于my_date,对应行赋值1
      all(is.na(Data_Fine_Effettiva)) & !is.na(max(Data_Inizio_Effettiva, na.rm = TRUE)) & 
        Data_Inizio_Effettiva == max(Data_Inizio_Effettiva, na.rm = TRUE) & Data_Inizio_Effettiva < my_date ~ 1,
      # 其余情况赋值0
      .default = 0
    )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:32:04