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

如何为R语言数据框的每个分组生成长度为n的重复编号?

为R语言数据集的分组添加重复长度为n的编号

原始数据集定义

test <- data.frame("group" = c(rep("AA",5),rep("BB",3)), "value" = 12:19)

原始数据输出:

test
#>   group value
#> 1    AA    12
#> 2    AA    13
#> 3    AA    14
#> 4    AA    15
#> 5    AA    16
#> 6    BB    17
#> 7    BB    18
#> 8    BB    19

需求说明

为每个分组添加从1开始、重复长度为n(示例中n=3)的编号,生成group_n列,最终效果如下:

#>   group value group_n
#> 1    AA    12    AA_1
#> 2    AA    13    AA_1
#> 3    AA    14    AA_1
#> 4    AA    15    AA_2
#> 5    AA    16    AA_2
#> 6    BB    17    BB_1
#> 7    BB    18    BB_1
#> 8    BB    19    BB_1

解决方案

方法1:基础R实现(无需额外包)

使用ave()函数按分组计算序号,再拼接字符串:

n <- 3
test$group_n <- paste0(test$group, "_", ave(seq_along(test$group), test$group, FUN = function(x) ceiling(x/n)))

# 查看结果
test

逻辑说明:seq_along()生成每行的全局索引,ave()按group分组处理,ceiling(x/n)将每组内的索引按每n个一组向上取整,得到连续重复的序号,最后用paste0()拼接成分组名_序号的格式。

方法2:tidyverse(dplyr)实现

如果习惯使用tidyverse语法,用分组后生成行号再计算序号:

library(dplyr)

n <- 3
test <- test %>%
  group_by(group) %>%
  mutate(group_n = paste0(group, "_", ceiling(row_number()/n))) %>%
  ungroup()

# 查看结果
test

逻辑说明:group_by(group)按分组拆分数据,row_number()生成每组内的行号,ceiling(row_number()/n)计算每组内的重复序号,最后拼接字符串并取消分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:11:11