Учитывая вектор season_year <- c("A", "autumn 2016", "summer 2017")
вызов
replace(season_year, c("autumn 2016", "summer 2017"), c(2016, 2017))
приводит к
# autumn 2016 summer 2017
# "A" "autumn 2016" "summer 2017" "2016" "2017"
Когда вы смотрите на то, что replace
делает
function (x, list, values)
{
x[list] <- values
x
}
васможет обнаружить вашу ошибку: вы добавляете две записи к вашему вектору.Вот почему ошибка «замена имеет 52 строки, данные - 50» (в кадре данных должно быть одинаковое количество записей в каждом столбце).
Попробуйте %in%
вместо
replace(season_year, season_year %in% c("autumn 2016", "summer 2017"), c(2016, 2017))
#[1] "A" "2016" "2017"
note
Этот подход работает для фиктивного вектора выше.В случае, если не работает с вашими данными 1) попробуйте дать минимальный воспроизводимый пример и 2) просто попробуйте
env_PLI$season_year[env_PLI$season_year == "autumn 2016"] <- "2016"
env_PLI$season_year[env_PLI$season_year == "autumn 2017"] <- "2017"
или попробуйте
env_PLI$season_year <- gsub("(autumn|summer)\\s+", "", env_PLI$season_year)
# similar to @Moody_Mudskipper's second solution
Благодаря @RichardTelford и @Duckmayr.