如何在 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

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

示例

 实时演示

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

更新于: 2021年2月6日

1K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告