在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
相关产品推荐
相关产品推荐

