我有一个数据框
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>
任何人都可以帮助我。感谢
答案 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>