Ich weiß, wenn ich einen Datenrahmen mit mehr als einer Spalte habe, kann ich ihn verwenden
colnames(x) <- c("col1","col2")
um die Spalten umzubenennen. Wie mache ich das, wenn es nur eine Spalte ist? ... Ein Vektor oder ein Datenrahmen mit nur einer Spalte.
Beispiel:
trSamp <- data.frame(sample(trainer$index, 10000))
head(trSamp )
# sample.trainer.index..10000.
# 1 5907862
# 2 2181266
# 3 7368504
# 4 1949790
# 5 3475174
# 6 6062879
ncol(trSamp)
# [1] 1
class(trSamp)
# [1] "data.frame"
class(trSamp[1])
# [1] "data.frame"
class(trSamp[,1])
# [1] "numeric"
colnames(trSamp)[2] <- "newname2"
# Error in names(x) <- value :
# 'names' attribute [2] must be the same length as the vector [1]
colnames(trSamp)[2] <- "newname2"
versucht, den Namen der zweiten Spalte festzulegen. Ihr Objekt hat nur eine Spalte, daher gibt der Befehl einen Fehler aus. Das sollte ausreichen:
colnames(trSamp) <- "newname2"
Dies ist eine verallgemeinerte Methode, bei der Sie sich nicht die genaue Position der Variablen merken müssen:
# df = dataframe
# old.var.name = The name you don't like anymore
# new.var.name = The name you want to get
names(df)[names(df) == 'old.var.name'] <- 'new.var.name'
Dieser Code hat folgende Eigenschaften:
names(df)
prüft alle Namen in der df
[names(df) == old.var.name]
extrahiert den Variablennamen, den Sie prüfen möchten<- 'new.var.name'
weist den neuen Variablennamen zu.colnames(df)[colnames(df) == 'oldName'] <- 'newName'
Dies ist eine alte Frage, aber es ist erwähnenswert, dass Sie jetzt setnames
aus dem data.table
-Paket verwenden können.
library(data.table)
setnames(DF, "oldName", "newName")
# or since the data.frame in question is just one column:
setnames(DF, "newName")
# And for reference's sake, in general (more than once column)
nms <- c("col1.name", "col2.name", etc...)
setnames(DF, nms)
Dies kann auch mit dem Hadley-Paket plyr
und der Funktion rename
erfolgen.
library(plyr)
df <- data.frame(foo=rnorm(1000))
df <- rename(df,c('foo'='samples'))
Sie können den Namen umbenennen (ohne die Position zu kennen) und mehrere Umbenennungen gleichzeitig ausführen. Nach einer Zusammenführung können Sie zum Beispiel mit:
letterid id.x id.y
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Das können Sie dann in einem Schritt umbenennen mit:
letters <- rename(letters,c("id.x" = "source", "id.y" = "target"))
letterid source target
1 70 2 1
2 116 6 5
3 116 6 4
4 116 6 3
5 766 14 9
6 766 14 13
Ich denke, die beste Möglichkeit, Spalten umzubenennen, ist das Paket dplyr wie folgt zu verwenden:
require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)
Dies funktioniert genauso, wenn Sie eine oder mehrere Spalten in einem Dataset umbenennen.
Ich mag den nächsten Stil zum Umbenennen von Dataframe-Spaltennamen nacheinander.
colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'
woher
which(colnames(df) == 'old_colname')
gibt den Index der jeweiligen Spalte zurück.
Ich finde, dass der bequemste Weg, eine einzelne Spalte umzubenennen, dplyr::rename_at
ist:
library(dplyr)
cars %>% rename_at("speed",~"new") %>% head
cars %>% rename_at(vars(speed),~"new") %>% head
cars %>% rename_at(1,~"new") %>% head
# new dist
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
Sie können den rename.vars
im gdata
-Paket verwenden.
library(gdata)
df <- rename.vars(df, from = "oldname", to = "newname")
Dies ist besonders nützlich, wenn Sie mehr als einen Variablennamen ändern möchten oder wenn Sie Text an die Variablennamen anhängen oder anhängen möchten. Dann können Sie Folgendes tun:
df <- rename.vars(df, from = c("old1", "old2", "old3",
to = c("new1", "new2", "new3"))
Ein Beispiel zum Anhängen von Text an eine Teilmenge von Variablennamen finden Sie unter: https://stackoverflow.com/a/28870000/180892
Versuchen:
colnames(x)[2] <- 'newname2'
Sie können auch 'upData' aus dem 'Hmisc'-Paket ausprobieren.
library(Hmisc)
trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))
Das ist wahrscheinlich schon da draußen, aber ich habe mit dem Umbenennen von Feldern gespielt, während ich nach einer Lösung gesucht habe, und dies aus einer Laune heraus versucht. Arbeitete für meine Zwecke.
Table1$FieldNewName <- Table1$FieldOldName
Table1$FieldOldName <- NULL
Bearbeiten beginnt hier ....
Das funktioniert auch.
df <- rename(df, c("oldColName" = "newColName"))
Wenn Sie wissen, dass Ihr Datenrahmen nur eine Spalte enthält, können Sie Folgendes verwenden: names(trSamp) <- "newname2"
Die Frage des OP wurde wirklich gut beantwortet. Hier ist jedoch ein Trick, der in bestimmten Situationen nützlich sein kann: Teilweise Übereinstimmung des Spaltennamens, unabhängig von seiner Position in einem Datenrahmen:
Teilweise Übereinstimmung mit dem Namen:
d <- data.frame(name1 = NA, Reported.Cases..WHO..2011. = NA, name3 = NA)
## name1 Reported.Cases..WHO..2011. name3
## 1 NA NA NA
names(d)[grepl("Reported", names(d))] <- "name2"
## name1 name2 name3
## 1 NA NA NA
Ein weiteres Beispiel: teilweise Übereinstimmung bei Vorhandensein von "Interpunktion":
d <- data.frame(name1 = NA, Reported.Cases..WHO..2011. = NA, name3 = NA)
## name1 Reported.Cases..WHO..2011. name3
## 1 NA NA NA
names(d)[grepl("[[:punct:]]", names(d))] <- "name2"
## name1 name2 name3
## 1 NA NA NA
Dies waren Beispiele, mit denen ich mich heute befassen musste. Ich dachte, es lohnt sich, sie zu teilen.
Ich würde dem Datenrahmen einfach eine neue Spalte mit dem gewünschten Namen hinzufügen und die Daten dafür aus der vorhandenen Spalte erhalten. so was:
dataf$value=dataf$Article1Order
dann entferne ich die alte spalte! so was:
dataf$Article1Order<-NULL
Dieser Code könnte dumm erscheinen! Aber es funktioniert perfekt ...
Ich würde einfach einen Spaltennamen in das Dataset mit dem gewünschten neuen Namen mit dem folgenden Code ändern: names (dataset) [index_value] <- "new_col_name"