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

R语言:按标识符分组创建轮次列时轮次号错误求助

解决R语言按分组生成轮次列的问题

先构造一个和你场景匹配的示例数据,模拟你遇到的错误情况:

library(dplyr)

df <- tibble(
  identifier = rep("ID1", 5),
  option = c("A", "B", "A", "A", "B"),
  # 模拟你当前得到的错误轮次
  wrong_round = c(1,1,2,2,2)
)

你遇到的核心问题是:检测到A和B同时出现时,立刻递增了轮次,但实际上完成轮次的那个观测应该属于当前轮,新轮次应该从下一个观测开始。

下面是修正后的代码,用dplyr实现:

df_correct <- df %>%
  group_by(identifier) %>%
  # 标记到当前行为止,是否同时出现过A和B
  mutate(has_A = cumsum(option == "A") > 0,
         has_B = cumsum(option == "B") > 0,
         round_complete = has_A & has_B) %>%
  # 关键:用lag()让轮次递增延迟到下一行
  mutate(round = cumsum(lag(round_complete, default = FALSE)) + 1) %>%
  # 清理临时辅助列
  select(-has_A, -has_B, -round_complete)

# 查看结果
df_correct

运行后输出的正确结果:

# A tibble: 5 × 4
# Groups:   identifier [1]
  identifier option wrong_round round
  <chr>      <chr>        <dbl> <dbl>
1 ID1        A                1     1
2 ID1        B                1     1
3 ID1        A                2     1
4 ID1        A                2     2
5 ID1        B                2     2

可以看到,原本错误标为2的第3行观测,现在正确归为第1轮——因为第2行才完成第一轮,新轮次从第4行才开始。

如果你的数据有多个不同的identifier,这段代码也能自动按分组处理,不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:13:26