Ich habe einen Datenrahmen namens "newprice" (siehe unten) und möchte die Spaltennamen in meinem Programm in R ändern.
> newprice
Chang. Chang. Chang.
1 100 36 136
2 120 -33 87
3 150 14 164
In der Tat ist dies, was ich tue:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Ich habe dies nicht in eine Schleife gesetzt, weil ich möchte, dass jeder Spaltenname anders ist, wie Sie sehen.
Wenn ich mein Programm in die R-Konsole einfüge, ist dies die Ausgabe, die es mir gibt:
> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"
Ich habe gleichermaßen versucht, die c()
Funktion zu verwenden - zum Beispiel c("premium")
anstelle der paste()
Funktion, aber ohne Erfolg.
Könnte mir jemand helfen, das herauszufinden?
is.matrix
oder überprüfenstr
.colnames(newprice)<- c("premium","change","newprice")
Antworten:
Verwenden Sie die
colnames()
Funktion:Sie können auch eine Teilmenge:
quelle
colnames(X)[c(1,2)] <- c("good", "better")
setnames()
imdata.table
Paket. Verwenden Sie so etwas wiesetnames(DT,"b","B")
odersetnames(DT,c("a","E"),c("A","F"))
q1
Versuch, den Datenrahmen mitdplyr
wie in zu mutieren , nach dem Festlegen der Spaltennamen des Datenrahmensq1 <- q1 %>% mutate(rel_count = count / 482462)
zu dem FehlerError in mutate_impl(.data, dots) : unknown column 'days'
(wobeidays
der Spalte ein neuer Name gegeben wird). Das ist wirklich frustrierend.Ich benutze das:
quelle
Der Fehler wird durch die "Smart-Quotes" (oder wie auch immer sie genannt werden) verursacht. Die Lektion hier lautet: "Schreiben Sie Ihren Code nicht in einen 'Editor', der Anführungszeichen in intelligente Anführungszeichen konvertiert."
Außerdem brauchen Sie keine
paste("premium")
(der Aufruf vonpaste
ist redundant) und es ist eine gute Idee, Leerzeichen zu setzen<-
, um Verwirrung zu vermeiden (zx <- -10; if(x<-3) "hi" else "bye"; x
. B. ).quelle
Hast du es gerade versucht:
names(newprice)[1]<-"premium"
?
quelle
Die neue empfohlene Methode hierfür ist die Verwendung der
setNames
Funktion. Siehe?setNames
. Da dies eine neue Kopie von erstelltdata.frame
, müssen Sie das Ergebnis dem Original zuweisendata.frame
, wenn dies Ihre Absicht ist.Neuere Versionen von R geben Ihnen eine Warnung, wenn Sie
colnames
einige der in früheren Antworten vorgeschlagenen Methoden verwenden.Wenn dies
data.table
stattdessen ein wäre, könnten Sie diedata.table
Funktion verwendensetnames
, mit der bestimmte Spaltennamen oder ein einzelner Spaltenname durch Bezugnahme geändert werden können :quelle
Ich hatte das gleiche Problem und dieser Code hat für mich funktioniert.
Kurz gesagt, dieser Code führt Folgendes aus:
names(data)
untersucht alle Namen im Datenrahmen (data
)[names(data) == oldVariableName]
extrahiert den Variablennamen (oldVariableName
), den Sie umbenennen möchten, und<- "newVariableName"
weist den neuen Variablennamen zu.quelle
Ähnlich wie bei den anderen:
Ganz einfach und leicht zu modifizieren.
quelle
Versuchen:
quelle
Wenn Sie nicht alle, sondern mehrere Spalten gleichzeitig umbenennen müssen, wenn Sie nur die alten Spaltennamen kennen, können Sie
colnames
Funktion und%in%
Operator verwenden. Beispiel:Jetzt möchten Sie "schlecht" und "schlecht" in "gut" und "am besten" ändern. Sie können verwenden
Das führt zu
quelle
Verwenden Sie diese Option, um den Spaltennamen nach der Funktion colname zu ändern.
quelle
Sie können die Bearbeitung einfach durchführen, indem Sie:
und ändern Sie den Spaltennamen manuell.
quelle
> locanatmodelset<-edit(locanatmodelset) Error in edit.data.frame(locanatmodelset) : can only handle vector and factor elements
Meine Spaltennamen sind wie folgt
Ich möchte den Spaltennamen von Klasse und Geschlecht ändern
quelle
Es gibt einige Optionen mit
dplyr::rename()
unddplyr::select()
:Es gibt auch drei Varianten mit Gültigkeitsbereich
dplyr::rename()
:dplyr::rename_all()
für alle Spaltennamen,dplyr::rename_if()
für das bedingte Targeting von Spaltennamen unddplyr::rename_at()
für ausgewählte benannte Spalten. Das folgende Beispiel ersetzt Leerzeichen und Punkte durch einen Unterstrich und konvertiert alles in Kleinbuchstaben:dplyr::select_all()
kann auch auf ähnliche Weise verwendet werden:quelle
Nur um die Antwort von Scott Wilson zu korrigieren und leicht zu erweitern.
Sie können die
setnames
Funktion von data.table auch für data.frames verwenden.Erwarten Sie keine Beschleunigung des Vorgangs, aber Sie können erwarten
setnames
, dass der Vorgang für den Speicherverbrauch effizienter ist, da er die Spaltennamen anhand der Referenz aktualisiert. Dies kann mit deraddress
Funktion verfolgt werden, siehe unten.Wenn Sie also an Ihre Speichergrenzen stoßen, können Sie stattdessen diese verwenden.
quelle
Dies kann hilfreich sein:
quelle
Falls wir 2 Datenrahmen haben, funktioniert das Folgende
Wir ändern die Namen von DF1 wie folgt
quelle