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

R语言实现:指定列值非唯一时创建分组连续序号新列

问题说明

现有两列数据框df,包含x、y两列,需要新增列z,在x的每个分组内按原始行顺序从1开始连续编号,测试数据构造代码如下:

x <- c("1", "1", "1", "1", "2", "2", "2", "3", "3", "3", "4", "4", "5", "6", "6", "6")
y <- c("Y", "Y", "Y", "Y", "N", "N", "Y", "Y", "Y", "Y", "Y", "Y", "Y", "N", "Y", "Y")
df <- data.frame(x, y) 

期望输出效果:

x y z
1  1 Y 1
2  1 Y 2
3  1 Y 3
4  1 Y 4
5  2 N 1
6  2 N 2
7  2 Y 3
8  3 Y 1
9  3 Y 2
10 3 Y 3
11 4 Y 1
12 4 Y 2
13 5 Y 1
14 6 N 1
15 6 Y 2
16 6 Y 3
实现方案

以下提供三种常用实现方式,输出结果完全匹配需求:

  • 基础R方案(无需安装加载第三方包)
    直接用ave()函数按x分组生成序列即可:
df$z <- ave(seq_len(nrow(df)), df$x, FUN = seq_along)
  • dplyr方案(适合tidyverse工作流)
    分组后用row_number()生成组内行号:
library(dplyr)
df <- df %>%
  group_by(x) %>%
  mutate(z = row_number()) %>%
  ungroup()
  • data.table方案(适合大数据量场景,运行速度快)
    按x分组后直接赋值序列:
library(data.table)
setDT(df)[, z := seq_len(.N), by = x]

注意:所有方案都保留数据原始行顺序,不会调整行的排列,序号完全按原始数据的出现顺序生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:51:25