如何在不丢失行名的情况下对R数据帧列进行排序?
当我们在R中对数据框列进行排序时,行名会丢失,但是我们可能需要它们。因此,需要在不丢失行名的情况下进行排序,并且可以在order函数的帮助下进行排序。例如,如果我们有一个名为df的数据框,该数据框具有一列x,则可以使用以下命令完成x的排序而不会丢失行名-
df[order(df$x),,drop=FALSE]
考虑以下数据帧-
示例
x1<-rnorm(20) x2<-rnorm(20,525,23.2) df1<-data.frame(x1,x2) row.names(df1)<-LETTERS[1:20] df1输出结果
x1 x2 A 1.7337922 534.3863 B -0.6754809 534.8879 C 0.1106191 520.2269 D 0.2270701 513.5676 E -0.5678853 558.2216 F -0.1885840 534.2416 G 0.2192299 552.8982 H 1.5135296 488.6875 I 0.9043322 529.6242 J 0.7014559 552.5001 K 0.2591020 514.1494 L -1.1273898 580.5344 M -0.1771963 516.4953 N 0.2317244 503.3607 O 0.6529487 501.4557 P -0.9165830 496.4222 Q -2.2928809 490.9002 R 0.7511574 519.3586 S 1.5003125 504.2702 T 1.3791592 496.9542
基于x2对df1进行排序而不会丢失行名-
df1[order(df1$x2),,drop=FALSE]
x1 x2 H 1.5135296 488.6875 Q -2.2928809 490.9002 P -0.9165830 496.4222 T 1.3791592 496.9542 O 0.6529487 501.4557 N 0.2317244 503.3607 S 1.5003125 504.2702 D 0.2270701 513.5676 K 0.2591020 514.1494 M -0.1771963 516.4953 R 0.7511574 519.3586 C 0.1106191 520.2269 I 0.9043322 529.6242 F -0.1885840 534.2416 A 1.7337922 534.3863 B -0.6754809 534.8879 J 0.7014559 552.5001 G 0.2192299 552.8982 E -0.5678853 558.2216 L -1.1273898 580.5344
示例
y1<-rpois(20,5) y2<-rpois(20,8) df2<-data.frame(y1,y2) row.names(df2)<-letters[1:20] df2输出结果
y1 y2 a 5 7 b 5 5 c 4 6 d 7 1 e 3 8 f 7 9 g 5 9 h 2 7 i 3 14 j 12 6 k 6 9 l 12 7 m 2 11 n 5 6 o 5 11 p 3 3 q 6 10 r 3 9 s 7 8 t 6 8
基于y1对df2进行排序而不会丢失行名-
df2[order(df2$y1),,drop=FALSE]
输出结果
y1 y2 h 2 7 m 2 11 e 3 8 i 3 14 p 3 3 r 3 9 c 4 6 a 5 7 b 5 5 g 5 9 n 5 6 o 5 11 k 6 9 q 6 10 t 6 8 d 7 1 f 7 9 s 7 8 j 12 6 l 12 7