Hoe hernoem je een enkele kolom in een data.frame?

Ik weet dat als ik een dataframe heb met meer dan 1 kolom, ik

. kan gebruiken

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

om de kolommen te hernoemen. Hoe doe ik dit als het maar één kolom is?
Dit betekent een vector- of dataframe met slechts één kolom erin.

Voorbeeld:

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]

Antwoord 1, autoriteit 100%

colnames(trSamp)[2] <- "newname2"

probeert de naam van de tweede kolom in te stellen. Uw object heeft slechts één kolom, dus de opdracht genereert een fout. Dit zou voldoende moeten zijn:

colnames(trSamp) <- "newname2"

Antwoord 2, autoriteit 98%

Dit is een algemene manier waarop u de exacte locatie van de variabele niet hoeft te onthouden:

# 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'

Deze code doet ongeveer het volgende:

  1. names(df)onderzoekt alle namen in de df
  2. [names(df) == old.var.name]extraheert de variabelenaam die u wilt controleren
  3. <- 'new.var.name'wijst de nieuwe variabelenaam toe.

Antwoord 3, autoriteit 24%

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

Antwoord 4, autoriteit 20%

Dit is een oude vraag, maar het is vermeldenswaard dat je nu setnamesuit het pakket data.tablekunt gebruiken.

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)

Antwoord 5, autoriteit 14%

Dit kan ook worden gedaan met Hadley’s plyr-pakket en de functie rename.

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

U kunt de naam wijzigen op naam (zonder de positie te kennen) en meerdere hernoemingen tegelijk uitvoeren. Nadat u bijvoorbeeld een samenvoeging hebt uitgevoerd, kunt u eindigen met:

 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

Die je vervolgens in één stap kunt hernoemen met:

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

Antwoord 6, autoriteit 11%

Ik denk dat de beste manier om kolommen te hernoemen is door het pakket dplyrals volgt te gebruiken:

require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)

Het werkt hetzelfde voor het hernoemen van een of meerdere kolommen in een dataset.


Antwoord 7, autoriteit 4%

Ik vind dat de handigste manier om een enkele kolom te hernoemen is door dplyr::rename_at:

te gebruiken

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
  • werkt goed in pijpkettingen
  • handig als namen worden opgeslagen in variabelen
  • werkt met een naam of een kolomindex
  • helder en compact

Antwoord 8, autoriteit 3%

Ik hou van de volgende stijl voor het één voor één hernoemen van kolomnamen van dataframes.

colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'

waar

which(colnames(df) == 'old_colname')

retourneert volgens de index van de specifieke kolom.


Antwoord 9, autoriteit 2%

Je kunt de rename.varsgebruiken in het gdatapakket.

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

Dit is met name handig wanneer u meer dan één variabelenaam moet wijzigen of als u tekst wilt toevoegen of voorafgaan aan de variabelenamen, dan kunt u zoiets doen als:

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

Voor een voorbeeld van het toevoegen van tekst aan een subset van variabelennamen, zie:
https://stackoverflow.com/a/28870000/180892


Antwoord 10

Laat df het dataframe zijn dat je hebt met de col-namen myDays en temp.
Als u “myDays” wilt hernoemen naar “Date”,

library(plyr)
rename(df,c("myDays" = "Date"))

of met pijp, dat kan

dfNew      <- df %>% 
  plyr::rename(c("myDays" = "Date"))

Antwoord 11

Dit is waarschijnlijk al beschikbaar, maar ik speelde met het hernoemen van velden terwijl ik naar een oplossing zocht en probeerde dit in een opwelling. Werkte voor mijn doeleinden.

Table1$FieldNewName <- Table1$FieldOldName
Table1$FieldOldName <- NULL

Bewerken begint hier….

Dit werkt ook.

df <- rename(df, c("oldColName" = "newColName"))

Antwoord 12

Probeer:

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

Antwoord 13

U kunt ook ‘upData’ uit het pakket ‘Hmisc’ proberen.

library(Hmisc)

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


Antwoord 14

Als u weet dat uw dataframe slechts één kolom heeft, kunt u het volgende gebruiken:
names(trSamp) <- "newname2"


Antwoord 15

De vraag van de OP is goed en oprecht beantwoord. Hier is echter een truc die in sommige situaties nuttig kan zijn: gedeeltelijke matching van de kolomnaam, ongeacht de positie in een dataframe:

Gedeeltelijke overeenkomst met de naam:

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

Een ander voorbeeld: gedeeltelijke overeenkomst op de aanwezigheid van “interpunctie”:

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

Dit waren voorbeelden waarmee ik vandaag te maken had, waarvan ik dacht dat ze de moeite waard waren om te delen.


Antwoord 16

Ik zou gewoon een nieuwe kolom aan het gegevensframe toevoegen met de naam die ik wil en de gegevens ervoor uit de bestaande kolom halen. zoals dit:

dataf$value=dataf$Article1Order

dan verwijder ik de oude kolom! zoals dit:

dataf$Article1Order<-NULL

Deze code lijkt misschien gek! Maar het werkt perfect…


Antwoord 17

Ik vond het argument colnames()makkelijker
https://www.rdocumentation.org/packages/ base/versions/3.6.2/topics/row%2Bcolnames

selecteer een kolom uit het dataframe

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

en hernoem de geselecteerde kolom in volgorde,

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

controleer de namen en de waarden om zeker te zijn

names(df);head(df)

Antwoord 18

We kunnen rename_withgebruiken om kolommen met een functie te hernoemen (bijvoorbeeld stringr-functies).

Beschouw de volgende gegevens 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" 

Hernoem alle variabelenmet 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"

Hernoem met name partikelmet enkele dplyrwerkwoorden (starts_with, ends_with, contains, matches, …).

Voorbeeld met .(xvariabelen):

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"

Hernoemen door classmet veel functies van klassentest, zoals is.integer, is.numeric, is.factor

Voorbeeld met 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"

De waarschuwing:

Waarschuwingsberichten:
1: In stri_replace_first_regex(string, patroon, fix_replacement(replacement), :
langere objectlengte is geen veelvoud van kortere objectlengte
2: In namen[cols] <- .fn(names[cols], …) :
het aantal te vervangen items is geen veelvoud van de vervangingslengte

Het is niet relevant, het is gewoon een inconsistentie van seq_along(.)met de vervangfunctie.


Antwoord 19

Ik zou gewoon een kolomnaam wijzigen in de dataset met de nieuwe naam die ik wil met de volgende code:
names(dataset)[index_value] <- “new_col_name”


Antwoord 20

library(dplyr)
rename(data, de=de.y)

Other episodes