Ответ 1
colnames(trSamp)[2] <- "newname2"
пытается установить второе имя столбца. Ваш объект имеет только один столбец, поэтому команда выдает ошибку. Этого должно быть достаточно:
colnames(trSamp) <- "newname2"
Я знаю, если у меня есть кадр данных с более чем 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]
colnames(trSamp)[2] <- "newname2"
пытается установить второе имя столбца. Ваш объект имеет только один столбец, поэтому команда выдает ошибку. Этого должно быть достаточно:
colnames(trSamp) <- "newname2"
Это обобщенный способ, в котором вам не нужно запоминать точное местоположение переменной:
# 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'
назначает новое имя переменной.colnames(df)[colnames(df) == 'oldName'] <- 'newName'
Это старый вопрос, но стоит отметить, что теперь вы можете использовать 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)
Это также можно сделать с помощью пакета 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
Я думаю, что лучший способ переименования столбцов - использовать пакет dplyr, например:
require(dplyr)
df = rename(df, new_col01 = old_col01, new_col02 = old_col02, ...)
Он работает одинаково для переименования одного или нескольких столбцов в любом наборе данных.
Мне нравится следующий стиль для переименования имен столбцов dataframe один за другим.
colnames(df)[which(colnames(df) == 'old_colname')] <- 'new_colname'
где
which(colnames(df) == 'old_colname')
возвращает индекс определенного столбца.
Я считаю, что наиболее удобный способ переименовать один столбец - использовать 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
Вы можете использовать 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/...
Try:
colnames(x)[2] <- 'newname2'
Вы также можете попробовать "upData" из пакета "Hmisc".
library(Hmisc)
trSamp = upData(trSamp, rename=c(sample.trainer.index..10000. = 'newname2'))
Если вы знаете, что ваш фреймворк имеет только один столбец, вы можете использовать:
names(trSamp) <- "newname2"
Это, скорее всего, уже там, но я играл с переименованием полей при поиске решения и пробовал это по прихоти. Работал для моих целей.
Table1$FieldNewName <- Table1$FieldOldName
Table1$FieldOldName <- NULL
Править начинается здесь....
Это тоже работает.
df <- rename(df, c("oldColName" = "newColName"))
Я просто добавил бы новый столбец во фрейм данных с нужным именем и получил бы данные для него из существующего столбца. как это:
dataf$value=dataf$Article1Order
тогда я уберу старую колонку! как это:
dataf$Article1Order<-NULL
Этот код может показаться глупым! Но это работает отлично...