So bestellen Sie meine DataFrame-Lexikografie

Ich habe folgenden Datenrahmen

a = data.frame(a=c(1,2,3,4,5,6,7),b=c(1,2,3,10,12,21,4),c=c(1,2,10,11,"X","Y",3))
> a
  a  b  c
1 1  1  1
2 2  2  2
3 3  3 10
4 4 10 11
5 5 12  X
6 6 21  Y
7 7  4  3

Ich möchte den gesamten Datenrahmen in lexikografischer Reihenfolge sortieren, damit die Ausgabe (z. B. Spalte "c") wie folgt aussieht

> a[,"c"]
[1] 1  2  3 10 11  X  Y

Ich habe es versucht und bekomme eine andere Antwort

indata <- a[do.call(order,a[,c("c","a","b")]),]
> indata[,"c"]
[1] 1  10 11 2  3  X  Y
Levels: 1 10 11 2 3 X Y

Ich habe gtools, mixedorder package ausprobiert und in einer Spalte einwandfrei gearbeitet:

> a[mixedorder(a$c),]
  a  b  c
1 1  1  1
2 2  2  2
3 3  3 10
4 4 10 11
5 5 12  X
6 6 21  Y
7 7  4  3

aber es funktioniert nicht, wenn ich mehrere Spalten einbinde:

> a[with(a,order(mixedorder(c),mixedorder(b),mixedorder(a))),]
  a  b  c
1 1  1  1
2 2  2  2
4 4 10 11
5 5 12  X
6 6 21  Y
7 7  4  3
3 3  3 10

obwohl ich erwarte:

  a  b  c
1 1  1  1
2 2  2  2
4 7  4  3
5 3  3 10
6 4 10 11
7 5 12  X
3 6 21  Y

Antworten auf die Frage(3)

Ihre Antwort auf die Frage