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

使用mutate()更新列时遇报错,需按OFFICIAL_NUMBER保留首值处理

R代码报错修复及需求实现

报错原因

在dplyr::mutate()中直接使用UPDATED_PENALTY$列名会调用整个数据框的列数据,而非当前分组内的对应行数据,导致长度不匹配(报错中分组内数据长度为12,但全局列长度为32217)。

修正代码

# 计算 HISTORIC_PENALTY(原逻辑保留)
UPDATED_PENALTY$HISTORIC_PENALTY <- ave(UPDATED_PENALTY$PENALTY, UPDATED_PENALTY$OFFICIAL_NUMBER, FUN = cumsum)

# 按 OFFICIAL_NUMBER 分组处理 cum_prodsum
UPDATED_PENALTY <- UPDATED_PENALTY %>%
  group_by(OFFICIAL_NUMBER) %>%
  mutate(
    cum_prodsum = case_when(
      row_number() == 1 ~ HISTORIC_PENALTY,  # 每组第一行保留原值
      INSPECTION_CLEARED == TRUE ~ HISTORIC_PENALTY * 0.9,
      TRUE ~ HISTORIC_PENALTY * 0.9 + PENALTY
    )
  ) %>%
  ungroup()  # 可根据需求选择是否取消分组

关键说明

  • 新增group_by(OFFICIAL_NUMBER)明确分组,确保逻辑针对每个独立的编号组生效。
  • 用row_number() == 1识别每组第一行,直接保留HISTORIC_PENALTY原值。
  • 替换ifelse为case_when,多条件判断逻辑更清晰易读。
  • 管道内直接使用列名(如INSPECTION_CLEARED),避免全局数据引用导致的长度不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:15:33