如何在不丢失行名的情况下对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