487 Stimmen

Ändern von Spaltennamen in einem Datenrahmen

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

Das ist es, 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 gestellt, 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 ich erhalte:

> 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 ebenfalls versucht, die c() Funktion - zum Beispiel c("premium") anstelle der paste() Funktion, aber ohne Erfolg.

Kann mir jemand helfen, das herauszufinden?

693voto

Dirk Eddelbuettel Punkte 345316

Verwenden Sie die colnames() Funktion:

R> X <- data.frame(bad=1:3, worse=rnorm(3))
R> X
  bad     worse
1   1 -2.440467
2   2  1.320113
3   3 -0.306639
R> colnames(X) <- c("good", "better")
R> X
  good    better
1    1 -2.440467
2    2  1.320113
3    3 -0.306639

Sie können auch eine Untermenge bilden:

R> colnames(X)[2] <- "superduper"

235voto

Matheus Abreu Punkte 3117

Ich benutze dies:

colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"

90voto

Joshua Ulrich Punkte 167720

Der Fehler wird durch die "intelligenten Anführungszeichen" (oder wie auch immer sie genannt werden) verursacht. Die Lehre daraus ist: "Schreiben Sie Ihren Code nicht in einem 'Editor', der Anführungszeichen in intelligente Anführungszeichen umwandelt".

names(newprice)[1]<-paste(“premium”)  # error
names(newprice)[1]<-paste("premium")  # works

Außerdem brauchen Sie nicht paste("premium") (die Aufforderung an paste ist redundant) und es ist eine gute Idee, Leerzeichen um <- um Verwechslungen zu vermeiden (z. B. x <- -10; if(x<-3) "hi" else "bye"; x ).

76voto

Jamie Punkte 5576

Versuchen Sie es:

names(newprice)[1] <- "premium"

56voto

Ich hatte das gleiche Problem und dieser Code hat mir geholfen.

names(data)[names(data) == "oldVariableName"] <- "newVariableName"

Kurz gesagt, dieser Code macht Folgendes:

names(data) untersucht alle Namen im Datenrahmen ( data )

[names(data) == oldVariableName] extrahiert den Variablennamen ( oldVariableName ), die umbenannt werden sollen, und <- "newVariableName" weist den neuen Variablennamen zu.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X