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

标签 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

期望的结果:

a_aa b_aa a_ab b_ab a_ac b_ac
2    3    3    1     3    2
3    1    4    3     1    1

带数据的代码:

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)

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

    dd %>% select(a_aa, b_aa, a_ab, b_ab, a_ac, b_ac)

但是,当列数很大时,它是繁重的。任何想法如何通过分组进行这种列排序(例如序列 a_etc1、b_etc1、a_etc2、b_etc2)?谢谢!

最佳答案

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

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

关于按正则表达式/模式对多列重新排序和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72926163/

相关文章:

r - 计算R中行中的非零条目

r - 数据帧过滤

r - 在 docx 中为 flextable 添加标题

r - 仅过滤满足条件的第一行的有效方法?

r - dplyr 列联表中的准确比例

r - 对于字符向量,是否有等同于 dplyr::between 的东西?

r - ggplot - 多个箱线图

r - 如何使用 dplyr 计算每列中的零?

r - 在 dplyr 中的两组不同列上计算 group_by() 中的累积总和

r - 如何在带有变量的 tidyr 中使用 gather_