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

在R中按指定规则对数据框列进行排序的方法求助

R数据框列排序解决方案

针对你需要的列排序规则(先按PIB后缀分组,再按Real后缀分组,每组内保持Saldo在前、Concessões在后),这里提供几种实用方案:

方案1:用dplyr::ends_with(最简单,无需正则)

直接按后缀筛选列,先选所有以PIB结尾的列,再选以Real结尾的列,原数据框中同后缀的列顺序会被保留,刚好符合你的需求:

library(dplyr)

# 假设你的数据框名为df
df <- df %>%
  select(ends_with("PIB"), ends_with("Real"))

方案2:用matches结合基础正则

如果一定要用matches,可以用$匹配字符串末尾,实现和ends_with一样的效果:

df <- df %>%
  select(matches("PIB$"), matches("Real$"))

PIB$表示匹配以PIB结尾的列,Real$同理。

方案3:手动指定列名(列数少的场景)

如果列数量不多,直接手动写列名最直观,完全不用考虑正则:

df <- df %>%
  select("Saldo...PIB", "Concessões...PIB", "Saldo...Real", "Concessões...Real")

方案4:通用拆分排序法(适合列数多/扩展性需求)

如果以后可能新增同规则的列,这种方法更通用:先拆分列名的前缀和后缀,按规则排序后重新选择列:

library(dplyr)
library(stringr)

# 提取列名的前缀和后缀,按规则排序
col_order <- tibble(col_name = colnames(df)) %>%
  mutate(
    suffix = str_extract(col_name, "(PIB|Real)$"),
    prefix = str_extract(col_name, "^(Saldo|Concessões)")
  ) %>%
  arrange(suffix, prefix) %>% # 先按后缀排序,再按前缀排序
  pull(col_name)

# 重新排列数据框的列
df <- df %>%
  select(all_of(col_order))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:06:21