web-dev-qa-db-de.com

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

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]
265
screechOwl
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"
267
Joshua Ulrich

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:

  1. names(df) prüft alle Namen in der df
  2. [names(df) == old.var.name] extrahiert den Variablennamen, den Sie prüfen möchten
  3. <- 'new.var.name' weist den neuen Variablennamen zu.
469
Side_0o_Effect
colnames(df)[colnames(df) == 'oldName'] <- 'newName'
75
zongshiwujie

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)
66
Ricardo Saporta

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
48
alexplanation

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.

25
Luis Vazquez

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.

10
jshepherd

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
  • funktioniert gut in rohrketten
  • praktisch, wenn Namen in Variablen gespeichert werden
  • arbeitet mit einem Namen oder einem Spaltenindex
  • klar und kompakt
6

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

5
Jeromy Anglim

Versuchen:

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

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

library(Hmisc)

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

3
ansek

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"))
2
Scottieie

Wenn Sie wissen, dass Ihr Datenrahmen nur eine Spalte enthält, können Sie Folgendes verwenden: names(trSamp) <- "newname2"

2
user399470

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.

0
PatrickT

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 ...

0
Niloufar

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"

0
Parthiban M