对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