Переименовать имена столбцов фрейма данных с приращением

У меня есть скрипт, генерирующий фрейм данных с несколькими столбцами, названными номерами 1, 2, 3 -> n

Я хочу переименовать столбцы со следующими именами: «Кластер_1», «Кластер_2», «Кластер_3» —> «Кластер_n» (с инкрементом).

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

Я хотел бы сделать что-то вроде:

for (i in colnames(df)){
    an expression that would change the column name to a concatenation of "Cluster_" + i
}

Вне контекста цикла я обычно использую это выражение для переименования столбца:

names(df)[names(df) == '1'] <- 'Cluster_1'

Но я изо всех сил пытаюсь создать адаптированную версию этого выражения, которая правильно интегрировалась бы в мой цикл for с конкатенацией строки и значения переменной.

Как я могу настроить выражение, которое переименовывает столбец фрейма данных, чтобы интегрировать его в мой цикл for?

Или есть лучший способ сделать это, чем цикл for?

colnames(df)=paste0("Cluster_",1:ncol(df))
user2974951 21.11.2022 10:03
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
1
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Использование paste0.

names(df) <- paste0('cluster_', seq_len(length(df)))

Если вам действительно нужна петля for, попробуйте

for (i in seq_along(names(df))) {
  names(df)[i] <- paste0('cluster_', i)
}

df
#   cluster_1 cluster_2 cluster_3 cluster_4
# 1         1         4         7        10
# 2         2         5         8        11
# 3         3         6         9        12

Примечание: colnames()/rownames() предназначен для класса "matrix", для "data.frame" вы можете использовать names()/row.names().


Данные:

df <- data.frame(matrix(1:12, 3, 4))
Ответ принят как подходящий

Аккуратное решение: rename_with()

require(dplyr)

## '~' notation can be used for formulae in this context:
df <- rename_with(df, ~ paste0("Cluster_", .))

Другие вопросы по теме