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

如何在R中创建按分组统计出现顺序的计数列

R 实现分组生成Counter列的方法

你需要按Name字段分组,生成对应Counter列,和你给出的SAS逻辑对应,有以下两种常见场景的实现方式:

场景1:分组内每行依次递增计数(从0开始)

对应输出示例中Kate的0、1、2、3的连续计数效果,3000个分组处理无压力:

方法1:使用dplyr(语法简洁易读)

# 未安装dplyr先执行:install.packages("dplyr")
library(dplyr)
df <- df %>%
  group_by(Name) %>%
  mutate(Counter = row_number() - 1) %>%
  ungroup()

方法2:使用data.table(大数据处理速度更快)

# 未安装data.table先执行:install.packages("data.table")
library(data.table)
setDT(df)
df[, Counter := seq_len(.N) - 1, by = Name]

方法3:Base R实现(无需安装额外包)

df$Counter <- ave(rep(1, nrow(df)), df$Name, FUN = function(x) cumsum(x) - 1)

场景2:分组内仅指定字段变化时计数递增

对应你给出的SAS代码中FIRST.Smoking_Status的逻辑,也匹配示例中John的0、1、1(相同Smoking_Status行Counter相同)的效果:

library(dplyr)
df <- df %>%
  group_by(Name) %>%
  # 可根据实际需求调整排序规则,确保Smoking_Status顺序正确
  arrange(Name, Smoking_Status, .by_group = TRUE) %>%
  mutate(Counter = cumsum(Smoking_Status != lag(Smoking_Status, default = first(Smoking_Status)))) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:24:06