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]

734voto

Side_0o_Effect Punkte 7441

Dies ist ein allgemeiner Weg, bei dem Sie sich nicht an die genaue Position der Variablen erinnern 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 macht so ziemlich das Folgende:

  1. names(df) prüft alle Namen in der Datei df
  2. [names(df) == old.var.name] extrahiert den Namen der zu prüfenden Variablen
  3. <- 'new.var.name' weist den neuen Variablennamen zu.

432voto

Joshua Ulrich Punkte 167720
colnames(trSamp)[2] <- "newname2"

versucht, den Namen der zweiten Spalte festzulegen. Ihr Objekt hat nur eine Spalte, so dass der Befehl einen Fehler auslöst. Dies sollte ausreichend sein:

colnames(trSamp) <- "newname2"

107voto

zongshiwujie Punkte 1119
colnames(df)[colnames(df) == 'oldName'] <- 'newName'

89voto

Ricardo Saporta Punkte 53183

Dies ist eine alte Frage, aber es ist erwähnenswert, dass Sie jetzt die Möglichkeit haben setnames von der data.table Paket.

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)

64voto

alexplanation Punkte 1438

Dies kann auch mit Hilfe von Hadleys plyr Paket, und das rename Funktion.

library(plyr) 
df <- data.frame(foo=rnorm(1000)) 
df <- rename(df,c('foo'='samples'))

Sie können nach dem Namen umbenennen (ohne die Position zu kennen) und mehrere Umbenennungen auf einmal vornehmen. Nach einer Zusammenführung könnten Sie z. B. folgendes Ergebnis erhalten:

  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

Diese können Sie dann in einem Schritt mit umbenennen:

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

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