如何将R数据帧的一列按升序排序,另一列按降序排序?

对R数据帧的列进行排序并不困难,但是有时我们想以相反的顺序对其进行排序,例如,我们可能希望以升序对某些列进行排序,而以降序对某些列进行排序。排序目的的这种变化使它有点复杂。因此,我们可以将否定和排序功能一起使用,以对要按降序排序的列进行排序。

示例

请看以下数据帧-

set.seed(111)
x1<-rnorm(20,2)
x2<-rpois(20,5)
x3<-sample(1:10,20,replace=TRUE)
x4<-sample(1:50,20)
x5<-rpois(20,10)
x6<-sample(1:100,20)
df<-data.frame(x1,x2,x3,x4,x5,x6)
df

输出结果

x1 x2 x3 x4 x5 x6
1 2.2352207 6 7 18 14 4
2 1.6692641 4 5 32 11 35
3 1.6883762 6 1 19 12 74
4 -0.3023457 8 10 33 14 65
5 1.8291240 5 10 25 8 9
6 2.1402782 4 7 27 10 55
7 0.5025733 4 4 28 7 83
8 0.9898116 7 4 44 10 47
9 1.0515244 6 1 11 9 88
10 1.5060378 7 9 31 13 67
11 1.8263259 6 6 12 12 48
12 1.5934012 5 8 41 13 44
13 3.8456363 1 3 6 8 27
14 2.3940541 4 10 39 9 58
15 2.7975285 12 8 38 13 10
16 0.4333346 5 10 50 11 99
17 1.9141490 5 1 9 6 40
18 1.6408605 5 9 40 6 32
19 0.8063910 2 10 35 8 5
20 2.3641867 7 10 36 6 15

按升序对第1列进行排序,并根据第1列对第6列进行排序-

示例

df[order(df[,1],-df[,6]),]

输出结果

x1 x2 x3 x4 x5 x6
4 -0.3023457 8 10 33 14 65
16 0.4333346 5 10 50 11 99
7 0.5025733 4 4 28 7 83
19 0.8063910 2 10 35 8 5
8 0.9898116 7 4 44 10 47
9 1.0515244 6 1 11 9 88
10 1.5060378 7 9 31 13 67
12 1.5934012 5 8 41 13 44
18 1.6408605 5 9 40 6 32
2 1.6692641 4 5 32 11 35
3 1.6883762 6 1 19 12 74
11 1.8263259 6 6 12 12 48
5 1.8291240 5 10 25 8 9
17 1.9141490 5 1 9 6 40
6 2.1402782 4 7 27 10 55
1 2.2352207 6 7 18 14 4
20 2.3641867 7 10 36 6 15
14 2.3940541 4 10 39 9 58
15 2.7975285 12 8 38 13 10
13 3.8456363 1 3 6 8 27

示例

df[order(-df[,2],-df[,3]),]

输出结果

x1 x2 x3 x4 x5 x6
15 2.7975285 12 8 38 13 10
4 -0.3023457 8 10 33 14 65
20 2.3641867 7 10 36 6 15
10 1.5060378 7 9 31 13 67
8 0.9898116 7 4 44 10 47
1 2.2352207 6 7 18 14 4
11 1.8263259 6 6 12 12 48
3 1.6883762 6 1 19 12 74
9 1.0515244 6 1 11 9 88
5 1.8291240 5 10 25 8 9
16 0.4333346 5 10 50 11 99
18 1.6408605 5 9 40 6 32
12 1.5934012 5 8 41 13 44
17 1.9141490 5 1 9 6 40
14 2.3940541 4 10 39 9 58
6 2.1402782 4 7 27 10 55
2 1.6692641 4 5 32 11 35
7 0.5025733 4 4 28 7 83
19 0.8063910 2 10 35 8 5
13 3.8456363 1 3 6 8 27

示例

df[order(-df[,2],df[,5]),]

输出结果

x1 x2 x3 x4 x5 x6
15 2.7975285 12 8 38 13 10
4 -0.3023457 8 10 33 14 65
20 2.3641867 7 10 36 6 15
8 0.9898116 7 4 44 10 47
10 1.5060378 7 9 31 13 67
9 1.0515244 6 1 11 9 88
3 1.6883762 6 1 19 12 74
11 1.8263259 6 6 12 12 48
1 2.2352207 6 7 18 14 4
17 1.9141490 5 1 9 6 40
18 1.6408605 5 9 40 6 32
5 1.8291240 5 10 25 8 9
16 0.4333346 5 10 50 11 99
12 1.5934012 5 8 41 13 44
7 0.5025733 4 4 28 7 83
14 2.3940541 4 10 39 9 58
6 2.1402782 4 7 27 10 55
2 1.6692641 4 5 32 11 35
19 0.8063910 2 10 35 8 5
13 3.8456363 1 3 6 8 27