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

如何基于两列分组排序创建新列?(优先使用Tidyverse)

解决方案:在分组内生成排序序号列(NewOrder)

使用tidyverse中的dplyr包,通过分组+生成行号的方式可以快速实现需求,核心逻辑是按TotalQuantile分组后,在组内基于TotalOrder的顺序生成连续序号。

核心代码

library(tidyverse)

# 替换为你的数据集名称
your_data <- your_data %>%
  group_by(TotalQuantile) %>%
  # 按TotalOrder升序生成组内序号
  mutate(NewOrder = row_number(TotalOrder)) %>%
  # 取消分组,避免影响后续操作
  ungroup()

代码说明

  • group_by(TotalQuantile):指定以TotalQuantile作为分组依据,后续的序号生成仅在每个分组内执行
  • mutate(NewOrder = row_number(TotalOrder)):在每个分组内,根据TotalOrder的升序排列生成从1开始的连续序号,赋值给新列NewOrder
  • ungroup():执行完分组操作后取消分组,确保后续对数据集的操作不受分组状态影响

样本数据验证

先构造你提供的样本数据:

# 构造样本数据集
sample_data <- tibble(
  人数 = c(12, 19, 21, 45, 53, 55, 60, 75),
  TotalOrder = c(1, 2, 3, 5, 5, 6, 7, 8),
  TotalQuantile = c(1, 1, 2, 2, 3, 3, 4, 4)
)

运行核心代码后,得到的结果如下:

人数TotalOrderTotalQuantileNewOrder
12111
19212
21321
45522
53531
55632
60741
75842

处理同组内重复值的情况

如果你的数据中存在同一TotalQuantile分组内TotalOrder值重复的情况,若希望相同TotalOrder对应相同的NewOrder,可以使用rank()函数并指定ties.method参数:

your_data <- your_data %>%
  group_by(TotalQuantile) %>%
  # 相同TotalOrder值得到相同序号,后续序号跳过重复计数
  mutate(NewOrder = rank(TotalOrder, ties.method = "min")) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:40:24