Как переименовать один столбец в data.frame? - PullRequest
285 голосов
/ 23 сентября 2011

Я знаю, если у меня есть фрейм данных с более чем 1 столбцом, я могу использовать

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

чтобы переименовать столбцы. Как мне это сделать, если это всего лишь один столбец? Значение вектора или фрейма данных с одним столбцом.

Пример:

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]

Ответы [ 16 ]

4 голосов
/ 23 сентября 2011

Попробуйте:

colnames(x)[2] <- 'newname2'
3 голосов
/ 29 июля 2012

Вы также можете попробовать «upData» из пакета «Hmisc».

library(Hmisc)

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

2 голосов
/ 23 сентября 2011

Если вы знаете, что ваш фрейм данных имеет только один столбец, вы можете использовать: names(trSamp) <- "newname2"

0 голосов
/ 05 марта 2019

Я бы просто изменил имя столбца на набор данных с новым желаемым именем со следующим кодом: names (набор данных) [index_value] <- "new_col_name" </strong>

0 голосов
/ 04 марта 2019

Вопрос ОП был хорошо и верно ответил.Однако вот прием, который может быть полезен в некоторых ситуациях: частичное сопоставление имени столбца, независимо от его положения в кадре данных:

Частичное сопоставление имени:

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

Другойпример: частичное совпадение при наличии «пунктуации»:

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

Это были примеры, с которыми мне приходилось сталкиваться сегодня, я подумал, что стоит поделиться.

0 голосов
/ 18 декабря 2018

Я бы просто добавил новый столбец во фрейм данных с нужным именем и получил бы данные для него из существующего столбца.вот так:

dataf$value=dataf$Article1Order

тогда я уберу старый столбец!как это:

dataf$Article1Order<-NULL

Этот код может показаться глупым!Но работает отлично ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...