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

如何为按Fish_ID分组的DataFrame创建首次成功标记二进制列?

修正方案

针对你的需求,这里提供两种基于dplyr的实现方式,精准标记每组中首次出现Success=1的位置:

方法一:累计求和判断法

mydata %>%
  group_by(Fish_ID) %>%  # 注意列名需与数据中一致(示例为Fish_ID,原代码小写会出错)
  mutate(First_Success = ifelse(Success == 1 & cumsum(Success) == 1, 1, 0)) %>%
  ungroup()

逻辑解释:

  • cumsum(Success) 对每组内的Success值做累计求和,首次出现Success=1时,累计和为1;后续再出现Success=1时,累计和会大于1。
  • 通过双重条件Success == 1 & cumsum(Success) == 1,仅选中每组第一个Success=1的行,标记为1,其余行设为0。

方法二:定位首次成功行号法

mydata %>%
  group_by(Fish_ID) %>%
  mutate(First_Success = case_when(
    row_number() == which(Success == 1)[1] ~ 1,
    TRUE ~ 0
  )) %>%
  ungroup()

逻辑解释:

  • which(Success == 1)[1] 获取每组中第一个Success=1的行在组内的位置。
  • row_number() 为每组内的行生成序号,当行号匹配首次成功的位置时标记为1,否则为0。
  • 若某组无Success=1的记录,which(Success == 1)[1]返回NA,此时该行会被自动标记为0,符合需求。

关键修正点:

  1. 原代码分组列名fish_ID与数据中的Fish_ID大小写不一致,会导致分组失效,需统一列名。
  2. 原代码变量名Fist_Success为拼写错误,修正为First_Success。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:31