根据列中的名称对数据框行进行排序

use*_*949 -1 r

我需要DF根据列中的相应名称对数据框()中的行重新排序DF.我DF看起来像这样

beta    se       hr    m
0.1     0.01     1     xl.vl.pl
0.2     0.02     2     l.vl.ce
0.3     0.03     3     s.vl.fc
0.4     0.04     4     idl.p
0.1     0.01     1     m.vl.pl
0.2     0.02     2     xs.vl.ce
0.3     0.03     3     l.vl.fc
0.4     0.04     4     idl.p
0.4     0.04     4     xxl.vl.pl
Run Code Online (Sandbox Code Playgroud)

我想根据专栏重新排序m,这样就可以了

0.4     0.04     4     xxl.vl.pl
0.1     0.01     1     xl.vl.pl
0.2     0.02     2     l.vl.ce
0.3     0.03     3     l.vl.fc
0.1     0.01     1     m.vl.pl
0.4     0.04     4     idl.p
0.4     0.04     4     idl.p
0.3     0.03     3     s.vl.fc
0.2     0.02     2     xs.vl.ce
Run Code Online (Sandbox Code Playgroud)

我感谢任何帮助和建议.

Cat*_*ath 5

您可以使用与m的第一部分相对应的有序因子(您可以通过调用来检索sub),根据您的意愿(xxl, xl, l, m, idl ,s, xs)进行排序,然后您可以使用它来订购data.frame:

DF[order(factor(sub("([^.]+)\\..+", "\\1", DF$m), 
   levels=c("xxl", "xl", "l", "m", "idl" ,"s", "xs"), ordered=TRUE)), ]

 # beta   se hr         m
# 9  0.4 0.04  4 xxl.vl.pl
# 1  0.1 0.01  1  xl.vl.pl
# 2  0.2 0.02  2   l.vl.ce
# 7  0.3 0.03  3   l.vl.fc
# 5  0.1 0.01  1   m.vl.pl
# 4  0.4 0.04  4     idl.p
# 8  0.4 0.04  4     idl.p
# 3  0.3 0.03  3   s.vl.fc
# 6  0.2 0.02  2  xs.vl.ce
Run Code Online (Sandbox Code Playgroud)