Wie würde man diese Eingabe ändern (mit der Reihenfolge: time, in, out, files):
Time In Out Files
1 2 3 4
2 3 4 5
Zu dieser Ausgabe (mit der Reihenfolge: time, out, in, files)?
Time Out In Files
1 3 2 4
2 4 3 5
Hier sind die Dummy-R-Daten:
table <- data.frame(Time=c(1,2), In=c(2,3), Out=c(3,4), Files=c(4,5))
table
## Time In Out Files
##1 1 2 3 4
##2 2 3 4 5
help(Extract)
auch bekannt als?'['
Antworten:
Ihr Datenrahmen hat vier Spalten
df[,c(1,2,3,4)]
. Beachten Sie, dass das erste Komma bedeutet, dass alle Zeilen beibehalten werden und das 1,2,3,4 sich auf die Spalten bezieht.Um die Reihenfolge wie in der obigen Frage zu ändern, tun Sie
df2[,c(1,3,2,4)]
Wenn Sie diese Datei als CSV ausgeben möchten, tun Sie dies
write.csv(df2, file="somedf.csv")
quelle
df[,c(1,3,2,4:ncol(df))]
wenn Sie nicht wissen, wie viele Spalten vorhanden sind.quelle
data <- data[c(1,3,"Var1", 2)]
?c(1,3,"Var1", 2)
wird so gelesen, als obc("1","3","Var1", "2")
Vektoren nur Daten eines Typs enthalten können, sodass Typen zum allgemeinsten vorhandenen Typ heraufgestuft werden . Da es keine Spalten mit den sind Zeichennamen „1“, „3“ usw. werden Sie „undefined Spalten“ erhalten.list(1,3,"Var1", 2)
behält Werte ohne Typwerbung bei, aber Sie könnenlist
im obigen Kontext keine verwenden .mtcars[c(1,3,2)]
Teilmenge? Ich hätte einen Fehler in Bezug auf falsche Abmessungen oder ähnliches erwartet ... Sollte es nicht seinmtcars[,c(1,3,2)]
?Sie können auch die Teilmengenfunktion verwenden:
Verwenden Sie den Operator [] besser wie in den anderen Antworten. Es kann jedoch hilfreich sein zu wissen, dass Sie eine Teilmenge und eine Spaltenumordnungsoperation in einem einzigen Befehl ausführen können.
Aktualisieren:
Sie können auch die Auswahlfunktion aus dem dplyr-Paket verwenden:
Ich bin mir über die Effizienz nicht sicher, aber dank der Syntax von dplyr sollte diese Lösung flexibler sein, insbesondere wenn Sie viele Spalten haben. Im Folgenden werden beispielsweise die Spalten des mtcars-Datasets in umgekehrter Reihenfolge neu angeordnet:
Im Folgenden werden nur einige Spalten neu angeordnet und andere verworfen:
Lesen Sie mehr über die Auswahlsyntax von dplyr .
quelle
subset()
, siehe diese Frage .everything()
besonders großartig.mtcars %>% select(wt, gear, everything())
Wie in diesem Kommentar erwähnt , sind die Standardvorschläge für die Neuordnung von Spalten in a
data.frame
im Allgemeinen umständlich und fehleranfällig, insbesondere wenn Sie viele Spalten haben.Mit dieser Funktion können Sie Spalten nach Position neu anordnen: Geben Sie einen Variablennamen und die gewünschte Position an und sorgen Sie sich nicht um die anderen Spalten.
Jetzt wird die Anfrage des OP so einfach:
Um zusätzlich
Time
undFiles
Spalten zu tauschen, können Sie dies tun:quelle
Eine
dplyr
Lösung (Teil destidyverse
Paketsets) besteht darin, Folgendes zu verwendenselect
:quelle
select(iris, Species, everything())
. Beachten Sie auch, dass keine Anführungszeichen erforderlich sind.everything()
gelöscht werden, die nicht explizit angegeben sind, es sei denn, Sie fügen wie in PaulRougieux 'Kommentardplyr
'sgroup
ordnet auch die Variablen neu an. Achten Sie also darauf, wenn Sie diese in einer Kette verwenden.Vielleicht ist es ein Zufall, dass die gewünschte Spaltenreihenfolge Spaltennamen in absteigender alphabetischer Reihenfolge enthält. Da dies der Fall ist, können Sie einfach Folgendes tun:
Das verwende ich, wenn ich große Dateien mit vielen Spalten habe.
quelle
!! WARNING !!
data.table
verwandelt sichTARGET
in einen int-Vektor:TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
um das zu beheben:TARGET <- as.data.frame(TARGET)
TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
Sie können das Paket data.table verwenden :
So ordnen Sie data.table-Spalten neu an (ohne zu kopieren)
quelle
Die drei am besten bewerteten Antworten haben eine Schwäche.
Wenn Ihr Datenrahmen so aussieht
dann ist es eine schlechte Lösung zu verwenden
Es macht den Job, aber Sie haben gerade eine Abhängigkeit von der Reihenfolge der Spalten in Ihrer Eingabe eingeführt.
Diese Art der spröden Programmierung ist zu vermeiden.
Die explizite Benennung der Spalten ist eine bessere Lösung
Wenn Sie beabsichtigen, Ihren Code in einer allgemeineren Einstellung wiederzuverwenden, können Sie dies einfach tun
Das ist auch sehr schön, weil es Literale vollständig isoliert. Im Gegensatz dazu, wenn Sie dplyr's verwenden
select
Dann würden Sie diejenigen einrichten, die Ihren Code später lesen, auch Sie selbst, für eine kleine Täuschung. Die Spaltennamen werden als Literale verwendet, ohne im Code als solcher zu erscheinen.
quelle
dplyr
Version1.0.0
enthält dierelocate()
Funktion zum einfachen Neuordnen von Spalten:oder
quelle
quelle
setcolorder
.Das einzige, was ich gut gesehen habe, ist von hier .
Verwenden Sie wie folgt:
Klappt wunderbar.
quelle