У меня есть скрипт, генерирующий фрейм данных с несколькими столбцами, названными номерами 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
?
Использование 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))
require(dplyr)
## '~' notation can be used for formulae in this context:
df <- rename_with(df, ~ paste0("Cluster_", .))
colnames(df)=paste0("Cluster_",1:ncol(df))