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

使用dplyr按主组为子组分配统一唯一排名的实现方法

按主组为子组分配统一排名的tidyverse实现方案
library(tidyverse)

# 构造输入数据
my_df <- tibble(
  var1 = c(rep("A", 8), rep("B", 12)),
  var2 = c(rep("long_string_x", 4), 
           rep("long_string_y", 4),
           rep("long_string_x", 4), 
           rep("long_string_y", 4), 
           rep("long_string_z", 4))
)

# 核心计算逻辑
my_df <- my_df %>%
  # 按主组var1分组,不同主组的排名独立计算互不干扰
  group_by(var1) %>%
  # 对组内var2做密集排名,相同var2值返回相同排名,排名序列连续无跳号
  mutate(group_rank = dense_rank(var2)) %>%
  # 可选:取消分组,避免后续操作受残留分组影响
  ungroup()

补充说明

  • 核心调用dplyr::dense_rank()函数实现子组统一排名,运行后输出结果和需求中的期望格式完全一致
  • 若需要自定义子组的排名顺序(不使用var2默认的字典序),可先将var2转为指定level顺序的因子,再执行排名即可,自定义顺序示例:
# 自定义var2的排名顺序为 z > y > x
my_df %>%
  mutate(var2 = factor(var2, levels = c("long_string_z", "long_string_y", "long_string_x"))) %>%
  group_by(var1) %>%
  mutate(group_rank = dense_rank(var2)) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 00:00:01