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 mache ich das:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Ich habe dies nicht in eine Schleife geschrieben, weil ich möchte, dass jeder Spaltenname anders ist, wie Sie sehen.
Wenn ich mein Programm in die R-Konsole einfüge, bekomme ich folgende Ausgabe:
> 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 auch versucht, die Funktion c()
zu verwenden, beispielsweise c("premium")
, anstelle der paste()
-Funktion, aber ohne Erfolg.
Könnte mir jemand helfen, das herauszufinden?
Verwenden Sie die Funktion colnames()
:
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 Untergruppe erstellen:
R> colnames(X)[2] <- "superduper"
Ich benutze das:
colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"
Der Fehler wird durch die "intelligenten Anführungszeichen" (oder wie auch immer sie genannt werden) verursacht. Die Lektion hier lautet: "Schreiben Sie Ihren Code nicht in einen Editor, der Zitate in intelligente Anführungszeichen umwandelt".
names(newprice)[1]<-paste(“premium”) # error
names(newprice)[1]<-paste("premium") # works
Außerdem brauchen Sie paste("premium")
nicht (der Aufruf von paste
ist redundant), und es ist eine gute Idee, Leerzeichen um <-
zu setzen, um Verwirrung zu vermeiden (z. B. x <- -10; if(x<-3) "hi" else "bye"; x
).
Hast du gerade versucht:
names(newprice)[1]<-"premium"
?
Die neue empfohlene Methode hierfür ist die Verwendung der Funktion setNames
. Siehe ?setNames
. Da dies eine neue Kopie von data.frame
erstellt, müssen Sie das Ergebnis dem ursprünglichen data.frame
zuordnen, falls dies Ihre Absicht ist.
data_frame <- setNames(data_frame, c("premium","change","newprice"))
Neuere Versionen von R geben eine Warnung aus, wenn Sie colnames
auf einige der in früheren Antworten vorgeschlagenen Methoden verwenden.
Wenn dies stattdessen ein data.table
wäre, können Sie die data.table
-Funktion setnames
verwenden, die bestimmte Spaltennamen oder einen einzelnen Spaltennamen anhand der Referenz ändern kann:
setnames(data_table, "old-name", "new-name")
Ich hatte das gleiche Problem und dieses Stück Code hat für mich geklappt.
names(data)[names(data) == "oldVariableName"] <- "newVariableName"
Kurz gesagt führt dieser Code Folgendes aus:
names(data)
prüft alle Namen im Datenrahmen (data
)
[names(data) == oldVariableName]
extrahiert den Variablennamen (oldVariableName
), den Sie umbenennen möchten, und <- "newVariableName"
weist den neuen Variablennamen zu.
Ähnlich wie die anderen:
cols <- c("premium","change","newprice")
colnames(dataframe) <- cols
Ganz einfach und leicht zu ändern.
Wenn Sie nicht alle, sondern mehrere Spalten gleichzeitig umbenennen möchten und nur die alten Spaltennamen kennen, können Sie die colnames
-Funktion und den %in%
-Operator verwenden. Beispiel:
df = data.frame(bad=1:3, worse=rnorm(3), worst=LETTERS[1:3])
bad worse worst
1 1 -0.77915455 A
2 2 0.06717385 B
3 3 -0.02827242 C
Jetzt möchten Sie "schlecht" und "schlecht" in "gut" und "am besten" ändern. Sie können verwenden
colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best")
Das führt zu
good worse best
1 1 -0.6010363 A
2 2 0.7336155 B
3 3 0.9435469 C
Sie können die Bearbeitung einfach durch:
newprice <- edit(newprice)
und ändern Sie den Spaltennamen manuell.
versuchen:
names(newprice) <- c("premium", "change", "newprice")
Meine Spaltennamen sind wie folgt
colnames(t)
[1] "Class" "Sex" "Age" "Survived" "Freq"
Ich möchte den Spaltennamen von Klasse und Geschlecht ändern
colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ")
Nur um Scott Wilson zu korrigieren und zu erweitern.
Sie können die setnames
-Funktion von data.table auch für data.frames verwenden.
Erwarten Sie keine Beschleunigung des Vorgangs. Sie können jedoch erwarten, dass die setnames
für den Speicherverbrauch effizienter ist, da die Spaltennamen durch Verweis aktualisiert werden. Dies kann mit der address
-Funktion verfolgt werden, siehe unten.
library(data.table)
set.seed(123)
n = 1e8
df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(df)
#[1] "0x208f9f00"
colnames(df) <- c("good", "better")
address(df)
#[1] "0x208fa1d8"
rm(df)
dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(dt)
#[1] "0x535c830"
setnames(dt, c("good", "better"))
address(dt)
#[1] "0x535c830"
rm(dt)
Wenn Sie also an Ihre Speichergrenzen stoßen, sollten Sie stattdessen diese verwenden.
Das kann hilfreich sein:
rename.columns=function(df,changelist){
#renames columns of a dataframe
for(i in 1:length(names(df))){
if(length(changelist[[names(df)[i]]])>0){
names(df)[i]= changelist[[names(df)[i]]]
}
}
df
}
# Specify new dataframe
df=rename.columns(df,list(old.column='new.column.name'))
Falls wir 2 Datenrahmen haben, funktioniert das folgende
DF1<-data.frame('a', 'b')
DF2<-data.frame('c','d')
Wir ändern die Namen von DF1 wie folgt
colnames(DF1)<- colnames(DF2)
Es gibt einige Optionen mit dplyr::rename()
und dplyr::select()
:
library(dplyr)
mtcars %>%
tibble::rownames_to_column('car_model') %>% # convert rowname to a column. tibble must be installed.
select(car_model, est_mpg = mpg, horse_power = hp, everything()) %>% # rename specific columns and reorder
rename(weight = wt, cylinders = cyl) %>% # another option for renaming specific columns that keeps everything by default
head(2)
car_model est_mpg horse_power cylinders disp drat weight qsec vs am gear carb
1 Mazda RX4 21 110 6 160 3.9 2.620 16.46 0 1 4 4
2 Mazda RX4 Wag 21 110 6 160 3.9 2.875 17.02 0 1 4 4
Es gibt auch drei Bereichsvarianten von dplyr::rename()
: dplyr::rename_all()
für alle Spaltennamen, dplyr::rename_if()
für das bedingte Targeting von Spaltennamen und dplyr::rename_at()
für ausgewählte benannte Spalten. Das folgende Beispiel ersetzt Leerzeichen und Punkte durch einen Unterstrich und konvertiert alles in Kleinbuchstaben:
iris %>%
rename_all(~gsub("\\s+|\\.", "_", .)) %>%
rename_all(tolower) %>%
head(2)
sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
dplyr::select_all()
kann auch auf ähnliche Weise verwendet werden:
iris %>%
select_all(~gsub("\\s+|\\.", "_", .)) %>%
select_all(tolower) %>%
head(2)
sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
Verwenden Sie diese Option, um den Spaltennamen nach der Funktion Colname zu ändern.
colnames(newprice)[1] = "premium"
colnames(newprice)[2] = "change"
colnames(newprice)[3] = "newprice"
Das hättest du sofort tun können
names(newprice) <- c("premium","change","newprice")
Der Befehl zum Einfügen, den Sie verwenden, erfordert mindestens zwei Argumente. Es funktioniert wie eine verkettete Funktion in Excel, weshalb es einen Fehler gibt, denke ich.
Abrufen der Daten mit den ausgewählten Spalten
get.the.df <- read_Excel("df.xls") %>%
select("X1","X2","X3");names(get.the.df)
ändere den Namen der Spalten von get.the.df
colnames(get.the.df) <- c("X22","X11","X33");names(get.the.df)