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

R语言分组生成GDS_FIRST列报错:长度需为3或1而非0

问题解决与代码修正

报错原因分析

你用的代码在遇到全NA的ID组(比如示例中的ID=2)时会出错:GDS >=5对全NA的组返回全NA,which.max(NA)会返回空向量(integer(0)),此时GDS[integer(0)]生成的是长度为0的结果,而mutate要求每个分组的新变量长度必须等于组内行数或为1(可广播),因此触发报错。

符合需求的修正代码

针对你提出的三个规则(全NA返回NA、首次GDS≥5取对应值、无符合条件值返回0),可以用dplyr的条件判断实现:

library(dplyr)

df %>%
  group_by(ID) %>%
  mutate(
    # 提取该组首次满足GDS≥5的非NA值,无则返回NULL
    first_ge5 = first(GDS[GDS >= 5 & !is.na(GDS)]),
    # 按规则生成目标列
    GDS_FIRST = case_when(
      all(is.na(GDS)) ~ NA_real_,  # 全NA组返回NA
      !is.null(first_ge5) ~ first_ge5,  # 存在符合条件值则取首次值
      TRUE ~ 0  # 有非NA但均<5时返回0
    )
  ) %>%
  ungroup()

代码验证

运行后会生成你期望的GDS_FIRST列:

  • ID=1:首次GDS≥5的值是5,所有行填充5
  • ID=2:全NA,所有行填充NA
  • ID=3:首次GDS≥5的值是6,所有行填充6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:14