如何根据因子级别对数据框的行进行排序

时间:2015-02-27 07:57:08

标签: r

我有一个数据框

        V1 V2 V3   V4   V5   V6
1  1-TPN21  2  A    P <NA> <NA>
2   8NAPK1  1  P <NA> <NA> <NA>
3     ADR1  1  P <NA> <NA> <NA>
4     CCL5  1  P <NA> <NA> <NA>
5    CPHB3  1  P <NA> <NA> <NA>
6     DFC2  1  P <NA> <NA> <NA>
7     dHRA  3  M   A    P  <NA>
8    DSPA6  2  P   P  <NA> <NA>
9   DUCA1A  1  A <NA> <NA> <NA>
10  NDAM32  4  A    P    P    P
11   NFDC2  1  M <NA> <NA> <NA>
12   ZDBA7  1  P <NA> <NA> <NA>

我想按照P,A,M的顺序对前两列进行排序。预期的结果是

        V1 V2 V3  V4  V5  V6
1  1-TPN21  2  P  A   <NA> <NA>
2   8NAPK1  1  P <NA> <NA> <NA>
3     ADR1  1  P <NA> <NA> <NA>
4     CCL5  1  P <NA> <NA> <NA>
5    CPHB3  1  P <NA> <NA> <NA>
6     DFC2  1  P <NA> <NA> <NA>
7     dHRA  3  P   A    M  <NA>
8    DSPA6  2  P   P  <NA> <NA>
9   DUCA1A  1  A <NA> <NA> <NA>
10  NDAM32  4  P    P    P    A
11   NFDC2  1  M <NA> <NA> <NA>
12   ZDBA7  1  P <NA> <NA> <NA>

任何人都可以帮助我。感谢

1 个答案:

答案 0 :(得分:0)

您可以尝试apply MARGIN=1按行排序。

df1[-(1:2)] <- t(apply(df1[-(1:2)], 1, function(x) 
              x[order(factor(x, levels=c('P', 'A', 'M')))]))

df1
#       V1 V2 V3   V4   V5   V6
#1  1-TPN21  2  P    A <NA> <NA>
#2   8NAPK1  1  P <NA> <NA> <NA>
#3     ADR1  1  P <NA> <NA> <NA>
#4     CCL5  1  P <NA> <NA> <NA>
#5    CPHB3  1  P <NA> <NA> <NA>
#6     DFC2  1  P <NA> <NA> <NA>
#7     dHRA  3  P    A    M <NA>
#8    DSPA6  2  P    P <NA> <NA>
#9   DUCA1A  1  A <NA> <NA> <NA>
#10  NDAM32  4  P    P    P    A
#11   NFDC2  1  M <NA> <NA> <NA>
#12   ZDBA7  1  P <NA> <NA> <NA>