Изменение имен столбцов фрейма данных
1062910 просмотра
18 ответа
У меня есть фрейм данных с именем «newprice» (см. Ниже), и я хочу изменить имена столбцов в моей программе на R.
> newprice
Chang. Chang. Chang.
1 100 36 136
2 120 -33 87
3 150 14 164
На самом деле это то, что я делаю:
names(newprice)[1]<-paste("premium")
names(newprice)[2]<-paste("change")
names(newprice)[3]<-paste("newprice")
Я не поместил это в цикл, потому что я хочу, чтобы каждое имя столбца было другим, как вы видите.
Когда я вставляю свою программу в консоль R, это вывод, который она дает мне:
> names(newprice)[1]<-paste(“premium”)
Error: unexpected input in "names(newprice)[1]<-paste(“"
> names(newprice)[2]<-paste(“change”)
Error: unexpected input in "names(newprice)[2]<-paste(“"
> names(newprice)[3]<-paste(“newpremium”)
Error: unexpected input in "names(newprice)[3]<-paste(“"
Я также пытался использовать c()
функцию, например c("premium")
, вместо paste()
функции, но безрезультатно.
Может ли кто-нибудь помочь мне понять это?
Автор: Son Источник Размещён: 17.05.2019 03:03Ответы (18)
512 плюса
Используйте colnames()
функцию:
R> X <- data.frame(bad=1:3, worse=rnorm(3))
R> X
bad worse
1 1 -2.440467
2 2 1.320113
3 3 -0.306639
R> colnames(X) <- c("good", "better")
R> X
good better
1 1 -2.440467
2 2 1.320113
3 3 -0.306639
Вы также можете подмножество:
R> colnames(X)[2] <- "superduper"
Автор: Dirk Eddelbuettel
Размещён: 21.05.2011 11:45
136 плюса
Я использую это:
colnames(dataframe)[which(names(dataframe) == "columnName")] <- "newColumnName"
Автор: Matheus Abreu
Размещён: 17.03.2014 06:00
70 плюса
Ошибка вызвана «умными кавычками» (или как они там называются). Урок здесь такой: «не пишите свой код в« редакторе », который преобразует кавычки в умные».
names(newprice)[1]<-paste(“premium”) # error
names(newprice)[1]<-paste("premium") # works
Кроме того, вам не нужно paste("premium")
(вызов paste
избыточен), и это хорошая идея, чтобы поместить пробелы вокруг, <-
чтобы избежать путаницы (например x <- -10; if(x<-3) "hi" else "bye"; x
).
39 плюса
33 плюса
Новый рекомендуемый способ сделать это - использовать setNames
функцию. См
?setNames
. Так как при этом создается новая копия data.frame
, обязательно назначьте результат оригиналу data.frame
, если вы этого хотите .
data_frame <- setNames(data_frame, c("premium","change","newprice"))
Более новые версии R будут предупреждать вас, если вы используете colnames
некоторые из способов, предложенных в предыдущих ответах.
Если бы это было data.table
вместо, вы могли бы использовать data.table
функцию setnames
, которая может изменять конкретные имена столбцов или имя одного столбца по ссылке :
setnames(data_table, "old-name", "new-name")
Автор: Scott C Wilson
Размещён: 19.03.2015 07:21
29 плюса
У меня была та же проблема, и этот кусок кода сработал для меня.
names(data)[names(data) == "oldVariableName"] <- "newVariableName"
Короче говоря, этот код выполняет следующие действия:
names(data)
просматривает все имена в фрейме данных ( data
)
[names(data) == oldVariableName]
извлекает имя переменной ( oldVariableName
), которую вы хотите переименовать, и <- "newVariableName"
присваивает имя новой переменной.
15 плюса
Подобно другим:
cols <- c("premium","change","newprice")
colnames(dataframe) <- cols
Довольно просто и легко изменить.
Автор: Adam Erickson Размещён: 31.10.2014 10:5210 плюса
Если вам нужно переименовать не все, а несколько столбцов одновременно, когда вы знаете только старые имена столбцов, вы можете использовать colnames
функцию и %in%
оператор. Пример:
df = data.frame(bad=1:3, worse=rnorm(3), worst=LETTERS[1:3])
bad worse worst
1 1 -0.77915455 A
2 2 0.06717385 B
3 3 -0.02827242 C
Теперь вы хотите изменить «плохой» и «худший» на «хороший» и «лучший». Ты можешь использовать
colnames(df)[which(colnames(df) %in% c("bad","worst") )] <- c("good","best")
Это приводит к
good worse best
1 1 -0.6010363 A
2 2 0.7336155 B
3 3 0.9435469 C
Автор: discipulus
Размещён: 25.01.2016 01:12
8 плюса
Вы можете просто сделать редактирование:
newprice <- edit(newprice)
и измените имя столбца вручную.
Автор: Baykal Размещён: 31.01.2013 07:597 плюса
пытаться:
names(newprice) <- c("premium", "change", "newprice")
Автор: ngamita
Размещён: 01.07.2013 02:52
5 плюса
Просто чтобы исправить и немного расширить ответ Скотта Уилсона.
Вы также можете использовать setnames
функцию data.table на data.frames.
Не ожидайте ускорения операции, но вы можете ожидать, что она setnames
будет более эффективной для потребления памяти, так как она обновляет имена столбцов по ссылке. Это можно отследить с помощью address
функции, см. Ниже.
library(data.table)
set.seed(123)
n = 1e8
df = data.frame(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(df)
#[1] "0x208f9f00"
colnames(df) <- c("good", "better")
address(df)
#[1] "0x208fa1d8"
rm(df)
dt = data.table(bad=sample(1:3, n, TRUE), worse=rnorm(n))
address(dt)
#[1] "0x535c830"
setnames(dt, c("good", "better"))
address(dt)
#[1] "0x535c830"
rm(dt)
Так что, если вы выходите за пределы своей памяти, вы можете вместо этого использовать этот.
Автор: jangorecki Размещён: 10.12.2015 01:015 плюса
Мои имена столбцов, как показано ниже
colnames(t)
[1] "Class" "Sex" "Age" "Survived" "Freq"
Я хочу изменить имя столбца класса и пола
colnames(t)=c("STD","Gender","AGE","SURVIVED","FREQ")
Автор: Mehul Katara
Размещён: 13.03.2018 09:15
2 плюса
Это может быть полезно:
rename.columns=function(df,changelist){
#renames columns of a dataframe
for(i in 1:length(names(df))){
if(length(changelist[[names(df)[i]]])>0){
names(df)[i]= changelist[[names(df)[i]]]
}
}
df
}
# Specify new dataframe
df=rename.columns(df,list(old.column='new.column.name'))
Автор: Chris
Размещён: 19.05.2016 11:02
1 плюс
В случае, если у нас есть 2 кадра данных, следующие работы
DF1<-data.frame('a', 'b')
DF2<-data.frame('c','d')
Мы меняем имена DF1 следующим образом
colnames(DF1)<- colnames(DF2)
Автор: Raghavan vmvs
Размещён: 03.01.2018 08:11
1 плюс
Есть несколько вариантов с dplyr::rename()
и dplyr::select()
:
library(dplyr)
mtcars %>%
tibble::rownames_to_column('car_model') %>% # convert rowname to a column. tibble must be installed.
select(car_model, est_mpg = mpg, horse_power = hp, everything()) %>% # rename specific columns and reorder
rename(weight = wt, cylinders = cyl) %>% # another option for renaming specific columns that keeps everything by default
head(2)
car_model est_mpg horse_power cylinders disp drat weight qsec vs am gear carb
1 Mazda RX4 21 110 6 160 3.9 2.620 16.46 0 1 4 4
2 Mazda RX4 Wag 21 110 6 160 3.9 2.875 17.02 0 1 4 4
Существует также три варианта области действия dplyr::rename()
: dplyr::rename_all()
для всех имен столбцов, dplyr::rename_if()
для условного таргетинга имен столбцов и dplyr::rename_at()
для выбора именованных столбцов. Следующий пример заменяет пробелы и точки подчеркиванием и преобразует все в нижний регистр:
iris %>%
rename_all(~gsub("\\s+|\\.", "_", .)) %>%
rename_all(tolower) %>%
head(2)
sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
dplyr::select_all()
также можно использовать аналогичным образом:
iris %>%
select_all(~gsub("\\s+|\\.", "_", .)) %>%
select_all(tolower) %>%
head(2)
sepal_length sepal_width petal_length petal_width species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
Автор: sbha
Размещён: 04.07.2018 11:32
0 плюса
Вы могли бы сразу сделали
names(newprice) <- c("premium","change","newprice")
Используемая команда вставки принимает как минимум 2 аргумента. Он работает как конкатенация в Excel, поэтому я думаю, что он дает вам ошибку.
Автор: Aayush Agrawal Размещён: 18.04.2015 07:290 плюса
Получение данных с выбранными столбцами
get.the.df <- read_excel("df.xls") %>%
select("X1","X2","X3");names(get.the.df)
изменить название столбцов get.the.df
colnames(get.the.df) <- c("X22","X11","X33");names(get.the.df)
0 плюса
Используйте это, чтобы изменить имя столбца функцией colname.
colnames(newprice)[1] = "premium"
colnames(newprice)[2] = "change"
colnames(newprice)[3] = "newprice"
Автор: Sophanna
Размещён: 21.02.2019 08:38
Вопросы из категории :
- r Как получить доступ к последнему значению в векторе?
- r Пакеты оптимизации для R
- r Есть ли у R такие операторские операции, как Perl qw ()?
- r Библиотека / инструмент для рисования тройных / треугольных графиков
- r Участки без заголовков / надписей в R
- r Расчет скользящей средней
- r Режим Emacs ESS - вкладка для области комментариев
- r Преобразование данных из многих строк во многие столбцы
- r Проверить, содержит ли вектор данный элемент
- r Поиск всех позиций для нескольких элементов в векторе
- dataframe Разница между скобками [] и двойной скобкой [[]] для доступа к элементам списка или кадра данных
- dataframe Уровни коэффициента отбрасывания в заданном кадре данных
- dataframe Как отсортировать фрейм данных по нескольким столбцам
- dataframe Как объединить (объединить) кадры данных (внутренний, внешний, левый, правый)?
- dataframe Фильтрация строк данных.файла по логическому условию
- dataframe Изменение формы data.frame из широкого в длинный формат
- dataframe Как преобразовать столбец фрейма данных в числовой тип?
- dataframe R: Какой самый простой способ распечатать пары значений из data.frame?
- dataframe R: Как записать data.frame, чтобы я мог вставить его в SO, чтобы другие могли его прочитать?