Как переименовать один столбец в 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 ]

496 голосов
/ 11 мая 2013

Это обобщенный способ, при котором вам не нужно запоминать точное местоположение переменной:

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

Этот код в значительной степени выполняет следующее:

  1. names(df) просматривает все имена в df
  2. [names(df) == old.var.name] извлекает имя переменной, которую вы хотите проверить
  3. <- 'new.var.name' присваивает новое имя переменной.
288 голосов
/ 23 сентября 2011
colnames(trSamp)[2] <- "newname2"

пытается установить имя второго столбца.Ваш объект имеет только один столбец, поэтому команда выдает ошибку.Этого должно быть достаточно:

colnames(trSamp) <- "newname2"
78 голосов
/ 05 мая 2014
colnames(df)[colnames(df) == 'oldName'] <- 'newName'
68 голосов
/ 04 октября 2013

Это старый вопрос, но стоит отметить, что теперь вы можете использовать setnames из пакета data.table.

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)
49 голосов
/ 26 августа 2013

Это также можно сделать с помощью пакета plyr Хэдли и функции rename.

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

Вы можете переименовать по имени (не зная позиции) и выполнить несколько переименований одновременно.Например, после слияния вы можете получить:

  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

, который затем можно переименовать за один шаг, используя:

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
29 голосов
/ 15 июля 2017

Я думаю, что лучший способ переименовать столбцы - использовать пакет dplyr , например:

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

То же самое работает для переименования одного или нескольких столбцов в любом наборе данных.

10 голосов
/ 08 января 2014

Мне нравится следующий стиль для переименования имен столбцов данных по одному.

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

, где

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

возвращается по индексу определенного столбца.

9 голосов
/ 25 марта 2018

Я считаю, что наиболее удобный способ переименования одного столбца - это использование dplyr::rename_at:

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
  • хорошо работает в конвейерных цепочках
  • удобно, когда имена хранятся впеременные
  • работает с именем или индексом столбца
  • ясно и компактно
5 голосов
/ 20 марта 2017

Вы можете использовать rename.vars в пакете gdata.

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

Это особенно полезно, когда вам нужно изменить несколько имен переменных или вы хотите добавить или предварительно добавить какой-либо текст к именам переменных, тогда вы можете сделать что-то вроде:

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

Пример добавления текста в подмножество имен переменных см .: https://stackoverflow.com/a/28870000/180892

4 голосов
/ 01 февраля 2017

Это, вероятно, уже там, но я играл с переименованием полей, когда искал решение, и попытался это по прихоти Работал для моих целей.

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

Редактирование начинается здесь ....

Это тоже работает.

df <- rename(df, c("oldColName" = "newColName"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...