Как переименовать один столбец в data.frame?

Я знаю, если у меня есть кадр данных с более чем 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]

Ответ 1

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

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

colnames(trSamp) <- "newname2"

Ответ 2

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

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

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

  • names(df) просматривает все имена в df
  • [names(df) == old.var.name] извлекает имя переменной, которое вы хотите проверить.
  • <- 'new.var.name' назначает новое имя переменной.

Ответ 3

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

Ответ 4

Это старый вопрос, но стоит отметить, что теперь вы можете использовать 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 sake, in general (more than once column)
nms <- c("col1.name", "col2.name", etc...)
setnames(DF, nms)

Ответ 5

Это также можно сделать с помощью пакета Hadley 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

Ответ 6

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

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

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

Ответ 7

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

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

где

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

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

Ответ 8

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

Ответ 9

Вы можете использовать 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"))

Пример добавления текста к подмножеству имен переменных см. в: fooobar.com/questions/34637/...

Ответ 10

Try:

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

Ответ 11

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

library(Hmisc)

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

Ответ 12

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

Ответ 13

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

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

Править начинается здесь....

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

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

Ответ 14

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

dataf$value=dataf$Article1Order

тогда я уберу старую колонку! как это:

dataf$Article1Order<-NULL

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