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

R语言如何按第一列终点名称分组排序合并两个同结构文本文件

R实现同终点分组合并+按后缀数字排序的解决方案

以下是直接可用的实现代码,不需要逐个匹配终点名称,通过拆分第一列的内容自动完成分组和排序逻辑:

依赖工具推荐

优先使用tidyverse套件(包含dplyr、stringr)实现,逻辑更清晰,也附带base R的实现方案。

实现步骤

第一步:读入两个文件,新增辅助列

假设两个文件第一列的列名为endpoint_id,如果你的实际列名不同,替换对应位置即可:

# 加载依赖包
library(tidyverse)

# 读入文件,替换为你的实际文件路径
df1 <- read.delim("第一个文件路径", stringsAsFactors = FALSE)
df2 <- read.delim("第二个文件路径", stringsAsFactors = FALSE)

# 处理第一个文件,新增辅助列
df1 <- df1 %>%
  mutate(
    endpoint_prefix = str_remove(endpoint_id, ":\\d+$"), # 提取纯终点名称,作为分组依据
    suffix_num = as.integer(str_extract(endpoint_id, "\\d+$")), # 提取冒号后的数字,作为排序依据
    source = 1 # 标记来源,保证同数字的行第一个文件的排在前面
  )

# 用同样逻辑处理第二个文件
df2 <- df2 %>%
  mutate(
    endpoint_prefix = str_remove(endpoint_id, ":\\d+$"),
    suffix_num = as.integer(str_extract(endpoint_id, "\\d+$")),
    source = 2
  )

第二步:合并+按规则排序

merged_df <- bind_rows(df1, df2) %>%
  # 先按终点名称分组,再按后缀数字升序,同数字的来源为1的排在前面
  arrange(endpoint_prefix, suffix_num, source) %>%
  # 不需要辅助列可以删除,需要保留的话删掉这一行即可
  select(-endpoint_prefix, -suffix_num, -source)

可选:base R 实现方案

如果不想安装额外包,用R原生函数也可以实现:

# 读入文件
df1 <- read.delim("第一个文件路径", stringsAsFactors = FALSE)
df2 <- read.delim("第二个文件路径", stringsAsFactors = FALSE)

# 给df1加辅助列
df1$endpoint_prefix <- sub(":\\d+$", "", df1$endpoint_id)
df1$suffix_num <- as.integer(sub("^.+:(\\d+)$", "\\1", df1$endpoint_id))
df1$source <- 1

# 给df2加辅助列
df2$endpoint_prefix <- sub(":\\d+$", "", df2$endpoint_id)
df2$suffix_num <- as.integer(sub("^.+:(\\d+)$", "\\1", df2$endpoint_id))
df2$source <- 2

# 合并排序
merged_df <- rbind(df1, df2)
merged_df <- merged_df[order(merged_df$endpoint_prefix, merged_df$suffix_num, merged_df$source), ]
# 删除辅助列(可选)
merged_df <- merged_df[, !names(merged_df) %in% c("endpoint_prefix", "suffix_num", "source")]

验证提示

合并完成后可以用table(merged_df$endpoint_prefix)验证每个终点的行数是否为65+8=73行,确认合并逻辑正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:24:02