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]

2voto

Parthiban M Punkte 49

Ich würde einfach einen Spaltennamen in den Datensatz mit dem neuen Namen ändern, den ich mit dem folgenden Code haben möchte: names(dataset)[index_value] <- "neuer_col_name"

0voto

Niloufar Punkte 11

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 abrufen. etwa so:

dataf$value=dataf$Article1Order

dann entferne ich die alte Spalte! etwa so:

dataf$Article1Order<-NULL

Dieser Code mag albern erscheinen! Aber er funktioniert perfekt...

0voto

Seyma Kalay Punkte 1562

Ich fand colnames() Argument einfacher https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/row%2Bcolnames

eine Spalte aus dem Datenrahmen auswählen

df <- data.frame(df[, c( "hhid","b1005", "b1012_imp", "b3004a")])

und benennen Sie die ausgewählte Spalte der Reihe nach um,

colnames(df) <- c("hhid", "income", "cost", "credit")

Überprüfen Sie die Namen und die Werte, um sicher zu sein

names(df);head(df)

0voto

neves Punkte 740

Wir können verwenden rename_with zum Umbenennen von Spalten mit einer Funktion ( stringr Funktionen, zum Beispiel).

Betrachten Sie die folgenden Daten df_1 :

df_1 <- data.frame(
  x = replicate(n = 3, expr = rnorm(n = 3, mean = 10, sd = 1)), 
  y = sample(x = 1:2, size = 10, replace = TRUE)
)

names(df_1)

#[1] "x.1" "x.2" "x.3" "y" 

Umbenennen alle Variablen con dplyr::everything() :

library(tidyverse)

df_1 %>% 
  rename_with(.data = ., .cols = everything(.), 
              .fn = str_replace, pattern = '.*', 
              replacement = str_c('var', seq_along(.), sep = '_')) %>% 
  names()

#[1] "var_1" "var_2" "var_3" "var_4"

Umbenennen nach Namenspartikel mit einigen dplyr Verben ( starts_with , ends_with , contains , matches , ...).

Beispiel mit . ( x Variablen):

df_1 %>% 
  rename_with(.data = ., .cols = contains('.'), 
              .fn = str_replace, pattern = '.*', 
              replacement = str_c('var', seq_along(.), sep = '_')) %>% 
  names()

#[1] "var_1" "var_2" "var_3" "y"

Umbenennen nach Klasse mit vielen Funktionen der Klasse test, wie is.integer , is.numeric , is.factor ...

Beispiel mit is.integer ( y ):

df_1 %>% 
  rename_with(.data = ., .cols = is.integer, 
              .fn = str_replace, pattern = '.*', 
              replacement = str_c('var', seq_along(.), sep = '_')) %>% 
  names()

#[1] "x.1"   "x.2"   "x.3"   "var_1"

Die Warnung:

Warnmeldungen: 1: In stri_replace_first_regex(string, pattern, fix_replacement(replacement), : längere Objektlänge ist kein Vielfaches der kürzeren Objektlänge 2: In names[cols] <- .fn(names[cols], ...) : Anzahl der zu ersetzenden Elemente ist nicht ein Vielfaches der Länge von replacement

Das ist nicht relevant, da es sich nur um eine Unstimmigkeit der seq_along(.) mit der Ersetzen-Funktion.

-3voto

SmallChess Punkte 7420
library(dplyr)
rename(data, de=de.y)

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