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

R中实现指定文本列变化时将Time列重置为0/1重新计数

R中按Trial列分组重置Time列递增计数的实现

针对27万行规模、Trial列取值无回溯、累计切换395次的数据集,直接按Trial列分组生成连续序列即可,不需要做复杂的相邻值判断,所有方案都能秒级跑完。

  • 方案1:data.table实现(性能最优,推荐大数据量使用)
library(data.table)
setDT(df)
# 从1开始递增,需要从0开始就替换为 seq_len(.N) - 1
df[, Time := seq_len(.N), by = Trial]
  • 方案2:dplyr实现(适配tidyverse工作流)
library(dplyr)
df <- df %>%
  group_by(Trial) %>%
  # 从1开始递增,需要从0开始就替换为 row_number() - 1
  mutate(Time = row_number()) %>%
  ungroup()
  • 方案3:基础R实现(无第三方包依赖)
# 从1开始递增,需要从0开始就在结果后减1
df$Time <- ave(rep(1L, nrow(df)), df$Trial, FUN = cumsum)

以上方案用提供的示例数据运行,输出完全匹配预期结果:

TimeTrial
1A
2A
1B
2B

备用适配:如果后续遇到Trial取值回溯出现的场景,不能直接按Trial值分组,需要先识别相邻行的Trial变化点生成分组ID再计数,dplyr写法示例:

df <- df %>%
  mutate(.group_id = cumsum(Trial != lag(Trial, default = first(Trial)))) %>%
  group_by(.group_id) %>%
  mutate(Time = row_number()) %>%
  ungroup() %>%
  select(-.group_id)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:48:42