Обновление не всех значений в DataFrame в R - PullRequest
1 голос
/ 17 апреля 2020

Я хочу обновить столбец в кадре данных с int на категориальный.

Я выполняю следующие 4 оператора, чтобы начать работу

goalkeepers$value_eur[goalkeepers$value_eur >= 0 & goalkeepers$value_eur <= 20000000] <- "Low"
goalkeepers$value_eur[goalkeepers$value_eur > 20000000 & goalkeepers$value_eur <= 40000000] <- "Medium - Low"
goalkeepers$value_eur[goalkeepers$value_eur > 40000000 & goalkeepers$value_eur <= 60000000] <- "Medium - High"
goalkeepers$value_eur[goalkeepers$value_eur > 60000000 & goalkeepers$value_eur <= 80000000] <- "High"

Однако, когда я go обратно в Dataframe, поле value_eur не было обновлено для примерно 20 строк (обычно это значение «Medium - Low».

Стоит отметить, что все ожидаемые строки обновляются, кроме этих 20 строк. Все другие значения, которые, как ожидается, будут помечены как «Средний - Низкий», помечены правильно

Является ли это ошибкой в ​​R? Я действительно не вижу, как код об изменит некоторые значения в категории, но не все.

1 Ответ

0 голосов
/ 17 апреля 2020

Мы можем использовать 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...