按列名称中的前缀排列列

Mad*_*dam 3 r reshape tidyverse

我有一个包含数百列的数据框,这是一个简化的示例:

在此输入图像描述

我需要安排特定列的顺序,以便它们根据列名称中的前缀“保持在一起”,即给定示例中的 v_1、v_2、v_3 和 spr_1、spr_2、spr_3。所以想要的安排应该是这样的: 在此输入图像描述

由于原始数据框中的列数量巨大,因此需要通过指定前缀(例如“spr_”)来选择列,而不是显式选择每一列(例如c(spr_1, spr_2, spr_3))。如果有必要,使用 tidyverse 的方法很棒,因为我已经使用了该库。

样本数据:

library(tidyverse)

df <- data.frame(
  v_1 = c('A', 'B', 'C'),
  xyz = c(1,2,3),
  spr_1 = c('AA', 'BB', 'CC'),
  spr_2 = c('DD', 'EE', 'FF'),
  v_2 = c('D', 'E', 'F'),
  quert = c('X', 'G', 'T'),
  spr_3 = c('GG', 'HH', 'II'),
  v_3 = c('G', 'H', 'I')
)
Run Code Online (Sandbox Code Playgroud)

Pau*_*ulS 5

一个可能的解决方案:

library(dplyr)

df %>% 
  relocate(sort(names(.)))

#>   quert spr_1 spr_2 spr_3 v_1 v_2 v_3 xyz
#> 1     X    AA    DD    GG   A   D   G   1
#> 2     G    BB    EE    HH   B   E   H   2
#> 3     T    CC    FF    II   C   F   I   3
Run Code Online (Sandbox Code Playgroud)