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:
names(df)
onderzoekt alle namen in dedf
[names(df) == old.var.name]
extraheert de variabelenaam die u wilt controleren<- '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 setnames
uit het pakket data.table
kunt 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.vars
gebruiken in het gdata
pakket.
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_with
gebruiken 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 dplyr
werkwoorden (starts_with
, ends_with
, contains
, matches
, …).
Voorbeeld met .
(x
variabelen):
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)