我有一个类似于下表的表| 主题|第-1天|第一天|第-2天|| - ------| - ------| - ------| - ------|| 第00001号|1个|三个|五个|| 00002|第二章|四个|六个|我想知道如何按数字顺序对列名进行排序,首先是"主题",然后是第-2天、第-1天,最后是第1天?我的列比这多得多,可能需要在多个表上进行此操作,因此希望获得自动答案。
zzlelutf1#
使用gtools::mixedsort:
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_range和relocate组合在一起:
dplyr
num_range
relocate
dat %>% relocate(Subject, num_range("Day ", -2, 2))
vmdwslir2#
要完成@Maël答案,我们还可以使用mixedorder,也可以使用gtools:cave:通过删除第一列,mixedorder返回一个从1开始的索引。因此它需要从2开始,因此+1。
mixedorder
gtools
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
2条答案
按热度按时间zzlelutf1#
使用
gtools::mixedsort
:输出
或者在
dplyr
中,将num_range
和relocate
组合在一起:vmdwslir2#
要完成@Maël答案,我们还可以使用
mixedorder
,也可以使用gtools
:cave:通过删除第一列,
mixedorder
返回一个从1开始的索引。因此它需要从2开始,因此+1。