按正则表达式/模式对多列重新排序和分组

And*_*yeu 3 r dplyr tidyr

我有以下内容:

a_aa a_ab a_ac b_aa b_ab b_ac
2    3    3    3     1    2
3    4    1    1     3    1
Run Code Online (Sandbox Code Playgroud)

期望的结果:

a_aa b_aa a_ab b_ab a_ac b_ac
2    3    3    1     3    2
3    1    4    3     1    1
Run Code Online (Sandbox Code Playgroud)

带数据的代码:

d <- "a_aa a_ab a_ac b_aa   b_ab b_ac
2    3    3    3     1    2
3    4    1    1     3    1"
dd <- read.table(textConnection(object = d), header = T)
Run Code Online (Sandbox Code Playgroud)

我当前的解决方案是手动:

    dd %>% select(a_aa, b_aa, a_ab, b_ab, a_ac, b_ac)
Run Code Online (Sandbox Code Playgroud)

然而,当列数很大时,就很繁重了。有什么想法如何通过分组进行这种列排序(例如序列 a_etc1、b_etc1、a_etc2、b_etc2)?谢谢你!

B. *_*ang 6

这是解决您的问题的一种方法:

dd[order(gsub(".+_", "", names(dd)))]

# or

dd %>%
  select(order(gsub(".+_", "", names(.))))


  a_aa b_aa a_ab b_ab a_ac b_ac
1    2    3    3    1    3    2
2    3    1    4    3    1    1
Run Code Online (Sandbox Code Playgroud)