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

如何在R语言中按指定自定义顺序对数据表行进行排序?

用R语言对齐原始表与目标表的行顺序

首先,先将你提供的原始表和目标表转换成R可处理的数据框:

# 原始表
original_df <- data.frame(
  A = c(1,1,5,2,5,3,3,5,6,3,5,2,6,2,5,6,3,6,2,1,2,4,2,1,1,2,4,4,3,6),
  B = c(1,2,12,6,14,6,7,13,2,10,11,5,14,7,15,1,8,3,4,3,10,11,8,4,5,9,12,13,9,15)
)

# 目标表
target_df <- data.frame(
  A = c(1,1,1,1,1,3,3,3,3,3,5,5,5,5,5,6,6,6,2,2,2,2,2,2,2,4,4,4,6,6),
  B = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
)

以下是两种实用的解决方法:

方法一:用match函数匹配行组合

通过为每行创建唯一标识,匹配目标表的标识顺序来重排原始表:

# 生成行唯一标识
original_df$row_id <- paste(original_df$A, original_df$B, sep = "-")
target_df$row_id <- paste(target_df$A, target_df$B, sep = "-")

# 按目标表的标识顺序排序原始表
sorted_df <- original_df[match(target_df$row_id, original_df$row_id), ]

# 移除临时标识列
sorted_df <- sorted_df[, !names(sorted_df) %in% "row_id"]

方法二:使用dplyr包排序

如果你习惯tidyverse工具链,可以用因子指定排序规则:

library(dplyr)

# 为目标表的行组合创建带顺序的因子
target_order <- factor(
  paste(target_df$A, target_df$B, sep = "-"),
  levels = paste(target_df$A, target_df$B, sep = "-")
)

# 为原始表添加标识并按目标顺序排序
sorted_df <- original_df %>%
  mutate(row_tag = paste(A, B, sep = "-")) %>%
  mutate(row_tag = factor(row_tag, levels = levels(target_order))) %>%
  arrange(row_tag) %>%
  select(A, B)

验证匹配结果

运行以下代码确认排序后的表与目标表完全一致:

all.equal(sorted_df, target_df)

返回TRUE则说明行顺序匹配成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:40:43