Мы можем использовать cut
в base R
goalkeepers$value_cat <- cut(goalkeepers$value_eur, breaks = c(0, 20000000, 40000000, 60000000,80000000),
labels = c("Low", "Medium - Low", "Medium - High", "High"))
В коде OP он обновляет один и тот же столбец в каждом назначении, т.е. изменяет numeric
class
на character
, а затем применить логику c, примененную как в столбце numeric
. Вместо этого создайте новый столбец
goalkeepers$value_cat <- NA_character_
goalkeepers$value_cat[goalkeepers$value_eur >= 0 & goalkeepers$value_eur <= 20000000] <- "Low"
goalkeepers$value_cat[goalkeepers$value_eur > 20000000 & goalkeepers$value_eur <= 40000000] <- "Medium - Low"
goalkeepers$value_cat[goalkeepers$value_eur > 40000000 & goalkeepers$value_eur <= 60000000] <- "Medium - High"
goalkeepers$value_cat[goalkeepers$value_eur > 60000000 & goalkeepers$value_eur <= 80000000] <- "High"
Или, если предполагается изменить тот же столбец, затем создайте временный вектор и затем используйте его для применения логики c
tmpvec <- goalkeepers$value_eur
goalkeepers$value_eur[tmpvec>= 0 & tmpvec <= 20000000] <- "Low"
goalkeepers$value_eur[tmpvec > 20000000 & tmpvec <= 40000000] <- "Medium - Low"
goalkeepers$value_eur[tmpvec > 40000000 & tmpvec <= 60000000] <- "Medium - High"
goalkeepers$value_eur[tmpvec > 60000000 & tmpvec <= 80000000] <- "High"