У меня есть фрейм данных с именем «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()
функции, но безрезультатно.
Может ли кто-нибудь помочь мне понять это?
is.matrix
илиstr
.colnames(newprice)<- c("premium","change","newprice")
Ответы:
Используйте
colnames()
функцию:Вы также можете подмножество:
источник
colnames(X)[c(1,2)] <- c("good", "better")
setnames()
вdata.table
пакете. Используйте что-то вродеsetnames(DT,"b","B")
илиsetnames(DT,c("a","E"),c("A","F"))
q1
, попытка изменить фрейм данных, используяdplyr
как вq1 <- q1 %>% mutate(rel_count = count / 482462)
результате ошибкиError in mutate_impl(.data, dots) : unknown column 'days'
(гдеdays
новое имя, присвоенное столбцу). Это действительно расстраивает.Я использую это:
источник
Ошибка вызвана «умными кавычками» (или как они там называются). Урок здесь: «не пишите свой код в« редакторе », который преобразует кавычки в умные».
Кроме того, вам не нужно
paste("premium")
(вызовpaste
избыточен), и это хорошая идея, чтобы поместить пробелы вокруг,<-
чтобы избежать путаницы (напримерx <- -10; if(x<-3) "hi" else "bye"; x
).источник
Вы пробовали просто:
names(newprice)[1]<-"premium"
?
источник
Новый рекомендуемый способ сделать это - использовать
setNames
функцию. См?setNames
. Так как при этом создается новая копияdata.frame
, обязательно назначьте результат оригиналуdata.frame
, если вы этого хотите .Более новые версии R будут предупреждать вас, если вы используете
colnames
некоторые из способов, предложенных в предыдущих ответах.Если бы это было
data.table
вместо, вы могли бы использоватьdata.table
функциюsetnames
, которая может изменять конкретные имена столбцов или имя одного столбца по ссылке :источник
У меня была та же проблема, и этот кусок кода работал для меня.
Короче говоря, этот код выполняет следующие действия:
names(data)
просматривает все имена в фрейме данных (data
)[names(data) == oldVariableName]
извлекает имя переменной (oldVariableName
), которую вы хотите переименовать, и<- "newVariableName"
присваивает имя новой переменной.источник
Подобно другим:
Довольно просто и легко изменить.
источник
пытаться:
источник
Если вам нужно переименовать не все, а несколько столбцов одновременно, когда вы знаете только старые имена столбцов, вы можете использовать
colnames
функцию и%in%
оператор. Пример:Теперь вы хотите изменить «плохой» и «худший» на «хороший» и «лучший». Ты можешь использовать
Это приводит к
источник
Используйте это, чтобы изменить имя столбца функцией colname.
источник
Вы можете просто сделать редактирование:
и измените имя столбца вручную.
источник
> locanatmodelset<-edit(locanatmodelset) Error in edit.data.frame(locanatmodelset) : can only handle vector and factor elements
Мои имена столбцов, как показано ниже
Я хочу изменить название столбца класса и пола
источник
Есть несколько вариантов с
dplyr::rename()
иdplyr::select()
:Существует также три варианта области действия
dplyr::rename()
:dplyr::rename_all()
для всех имен столбцов,dplyr::rename_if()
для условного таргетинга имен столбцов иdplyr::rename_at()
для выбора именованных столбцов. Следующий пример заменяет пробелы и точки подчеркиванием и преобразует все в нижний регистр:dplyr::select_all()
также можно использовать аналогичным образом:источник
Просто чтобы исправить и немного расширить ответ Скотта Уилсона.
Вы также можете использовать
setnames
функцию data.table на data.frames.Не ожидайте ускорения операции, но вы можете ожидать, что она
setnames
будет более эффективной для потребления памяти, так как она обновляет имена столбцов по ссылке. Это можно отследить с помощьюaddress
функции, см. Ниже.Поэтому, если вы выходите за пределы своей памяти, вы можете вместо этого использовать эту.
источник
Это может быть полезно:
источник
В случае, если у нас есть 2 кадра данных, следующие работы
Мы меняем имена DF1 следующим образом
источник