437 Stimmen

Wie benennt man eine einzelne Spalte in einem data.frame um?

Ich weiß, wenn ich einen Datenrahmen mit mehr als 1 Spalte habe, dann kann ich verwenden

colnames(x) <- c("col1","col2")

um die Spalten umzubenennen. Wie macht man das, wenn es nur eine Spalte ist? Ich meine einen Vektor oder 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]

7voto

Jeromy Anglim Punkte 32121

Sie können die rename.vars en el gdata Paket.

library(gdata)
df <- rename.vars(df, from = "oldname", to = "newname")

Dies ist besonders nützlich, wenn Sie mehr als einen Variablennamen zu ändern haben oder einen Text an den Variablennamen anhängen oder vorangestellt haben möchten:

df <- rename.vars(df, from = c("old1", "old2", "old3", 
         to = c("new1", "new2", "new3"))

Ein Beispiel für das Anhängen von Text an eine Teilmenge von Variablennamen finden Sie unter: https://stackoverflow.com/a/28870000/180892

6voto

NPE Punkte 462670

Versuchen Sie es:

colnames(x)[2] <- 'newname2'

4voto

ansek Punkte 433

Sie können auch "upData" aus dem Paket "Hmisc" ausprobieren.

library(Hmisc)

trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))

3voto

Wenn Sie wissen, dass Ihr Datenrahmen nur eine Spalte hat, können Sie diese verwenden: names(trSamp) <- "newname2"

2voto

PatrickT Punkte 9024

Die Frage des Auftraggebers wurde bereits ausführlich beantwortet. Es gibt jedoch einen Trick, der in manchen Situationen nützlich sein kann: die 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: Teilabgleich 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

Mit diesen Beispielen hatte ich heute zu tun, und ich dachte, es lohnt sich, sie zu teilen.

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