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

如何按特定重复值序列对R语言DataFrame进行排序

按自定义顺序重新排列分组内的DataFrame序列

问题描述

现有如下R语言DataFrame:

df <- data.frame(col1 = c(1,1,1,1,2,2,2,2,3,3,3,3),
                 col2 = rep(c("A", "B", "C", "D"), 3))

输出为:

col1 col2
1     1    A
2     1    B
3     1    C
4     1    D
5     2    A
6     2    B
7     2    C
8     2    D
9     3    A
10    3    B
11    3    C
12    3    D

需要按col1分组,将每组内的col2按照A、C、B、D的顺序重新排序,得到如下结果:

df_result <- data.frame(col1 = c(1,1,1,1,2,2,2,2,3,3,3,3),
                        col2 = rep(c("A", "C", "B", "D"), 3))

输出为:

col1 col2
1     1    A
2     1    C
3     1    B
4     1    D
5     2    A
6     2    C
7     2    B
8     2    D
9     3    A
10    3    C
11    3    B
12    3    D

解决方案

方法1:使用dplyr(tidyverse生态)

通过分组后,利用因子的自定义水平指定排序规则:

library(dplyr)

# 定义目标排序顺序
custom_order <- c("A", "C", "B", "D")

df_sorted <- df %>%
  group_by(col1) %>%
  # 将col2转为指定水平的因子,按此规则排序
  arrange(factor(col2, levels = custom_order), .by_group = TRUE) %>%
  ungroup()

方法2:Base R实现

直接修改col2的因子水平,再结合col1完成排序:

custom_order <- c("A", "C", "B", "D")

# 将col2转为指定水平的因子
df$col2 <- factor(df$col2, levels = custom_order)
# 按col1和col2排序
df_sorted <- df[order(df$col1, df$col2), ]

# 若需要将col2转回字符类型,可执行:
# df_sorted$col2 <- as.character(df_sorted$col2)

两种方法最终都会得到符合要求的排序结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:23:12