В качестве альтернативного решения вы можете использовать gsub()
для замены всего «состояния». с ничего (""), здесь показано, что только с вектором:
gsub("state.", "", c("state.abb", "state.area", "state.division", "state.region"))
Чтобы заменить имена столбцов:
colnames(df) <- gsub("state.", "", colnames(df))
В качестве бонуса представьте, что вы хотите заменить слово или строка, которая встречается в некоторых, но не во всех ваших столбцах. Взяв в качестве примера встроенный набор данных радужной оболочки, вы можете заменить «Лепесток» на «Р» для столбцов, где «Лепесток» находится в имени столбца с точно таким же подходом:
colnames(iris) <- gsub("Petal", "P", colnames(iris))
Я бы не стал Для этой работы не нужно использовать для l oop, гораздо проще использовать векторизованный подход. Но, чтобы объяснить вашу ошибку, когда вы сделали colnames(df[1])
, вы возвращали имя столбца отдельного столбца данных, который вы изолировали от основного кадра данных , а не обрабатывали сам основной кадр данных. Например, iris[1]
возвращает кадр данных с одним столбцом - см. str(iris[1])
- поэтому colnames(iris[1])
возвращает имя столбца этого изолята. Небольшое изменение позволяет вместо этого вернуть (а затем изменить) 1-й элемент вектора имен столбцов для радужной оболочки: colnames(iris)[1]
.