重新排序r个 Dataframe 列,其中列名称混合使用字母和数字

busg9geu  于 2022-12-27  发布在  其他
关注(0)|答案(2)|浏览(150)

我有一个类似于下表的表
| 主题|第-1天|第一天|第-2天|
| - ------| - ------| - ------| - ------|
| 第00001号|1个|三个|五个|
| 00002|第二章|四个|六个|
我想知道如何按数字顺序对列名进行排序,首先是"主题",然后是第-2天、第-1天,最后是第1天?我的列比这多得多,可能需要在多个表上进行此操作,因此希望获得自动答案。

zzlelutf

zzlelutf1#

使用gtools::mixedsort

dat[c("Subject", gtools::mixedsort(names(dat)[-1]))]

输出

Subject Day -2 Day -1 Day 1
1       1      5      1     3
2       2      6      2     4

或者在dplyr中,将num_rangerelocate组合在一起:

dat %>% 
  relocate(Subject, num_range("Day ", -2, 2))
vmdwslir

vmdwslir2#

要完成@Maël答案,我们还可以使用mixedorder,也可以使用gtools
cave:通过删除第一列,mixedorder返回一个从1开始的索引。因此它需要从2开始,因此+1。

library(gtools)
library(dplyr)
df %>%
  select(1, mixedorder(names(.)[-1])+1)
# A tibble: 2 × 4
  Subject `Day -2` `Day -1` `Day 1`
  <chr>      <dbl>    <dbl>   <dbl>
1 00001          5        1       3
2 00002          6        2       4

相关问题