如何在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
相关产品推荐
相关产品推荐

