首页 > 解决方案 > 更改 r 中数字命名列的顺序

问题描述

如果我有一个像下面这样的数据框,它有数字列名

example = data.frame(1=c(1,8,3,9), 2=c(3,2,3,3), 3=c(5,2,5,4), 4=c(1,2,3,4), 5=c(2,5,7,8))

看起来像这样:

1 2 3 4 5
1 3 5 1 2
8 2 2 2 5
3 3 5 3 7
9 3 4 4 8

我想安排它,使列名以三开头,然后通过五,然后回到一,如下所示:

3 4 5 1 2
5 1 2 1 3
2 2 5 8 2
5 3 7 3 3 
4 4 8 9 3 

我知道如何重新排列数据集中单个列的位置,但我不确定如何以这个特定顺序处理多个列。

标签: rdataframe

解决方案


我们可以在一系列值上使用c基于序列 ( )连接的列索引 ( ):

example[c(3:5, 1:2)]
#   3 4 5 1 2
#1 5 1 2 1 3
#2 2 2 5 8 2
#3 5 3 7 3 3
#4 4 4 8 9 3

由于列名都是数字,只需转换为numeric并使用它进行排序

v1 <- as.numeric(names(example))
example[c(v1[3:5], v1[1:2])]

或者干脆做

example[c(names(example)[3:5], names(example)[1:2])]

或者另一种方式是headtail

example[c(tail(names(example), 3), head(names(example), 2))]

数据

example <- data.frame(`1`=c(1,8,3,9), `2`=c(3,2,3,3),
   `3`=c(5,2,5,4), `4`=c(1,2,3,4), `5`=c(2,5,7,8), check.names = FALSE)

推荐阅读