如何更改R数据框中的列顺序?

当我们要操作数据时,可能需要排序列。操纵可能有多种原因,例如交叉验证,可视化等。在更改原始数据中的任何内容时,我们也应注意,因为这可能会影响我们的处理。要更改列的顺序,我们可以使用单个方括号。

示例

请看以下数据帧-

> set.seed(1)
> Class<-letters[1:20]
> Grade<-rep(c("A","B","C","D"),times=5)
> Score<-sample(1:100,20,replace=TRUE)
> df<-data.frame(Class,Grade,Score)
> df
  Class Grade Score
1   a     A     68
2   b     B     39
3   c     C      1
4   d     D     34
5   e     A     87
6   f     B     43
7   g     C     14
8   h     D     82
9   i     A     59
10  j     B     51
11  k     C     97
12  l     D     85
13  m     A     21
14  n     B     54
15  o     C     74
16  p     D      7
17  q     A     73
18  r     B     79
19  s     C     85
20  t     D     37
> df<-df[, c("Grade","Class","Score")]
> df
  Grade Class Score
1   A     a    68
2   B     b    39
3   C     c     1
4   D     d    34
5   A     e    87
6   B     f    43
7   C     g    14
8   D     h    82
9   A     i    59
10  B     j    51
11  C     k    97
12  D     l    85
13  A     m    21
14  B     n    54
15  C     o    74
16  D     p     7
17  A     q    73
18  B     r    79
19  C     s    85
20  D     t    37

如果列名称按如下所示的顺序排列-

> x1<-letters[1:20]
> x2<-rep(c("A","B","C","D"),times=5)
> x3<-sample(1:100,20,replace=TRUE)
> df<-data.frame(x3,x2,x1)
> df
   x3 x2 x1
1  44 A  a
2  25 B  b
3  70 C  c 
4  39 D  d
5  51 A  e
6  42 B  f
7   6 C  g
8  24 D  h
9  32 A  i
10 14 B  j
11  2 C  k
12 45 D  l
13 18 A  m
14 22 B  n
15 78 C  o
16 65 D  p
17 70 A  q
18 87 B  r
19 70 C  s
20 75 D  t

现在我们可以使用sort函数来更改顺序,如下所示-

> df[,sort(names(df))]
   x1 x2 x3
1   a  A 44
2   b  B 25
3   c  C 70
4   d  D 39
5   e  A 51
6   f  B 42
7   g  C 6
8   h  D 24
9   i  A 32
10  j  B 14
11  k  C  2
12  l  D 45
13  m  A 18
14  n  B 22
15  o  C 78
16  p  D 65
17  q  A 70
18  r  B 87
19  s  C 70
20  t  D 75