Есть ли способ добавить новые столбцы в R на основе условий - PullRequest
0 голосов
/ 10 февраля 2019

В настоящее время используется R в Azure.Я пытаюсь создать новый столбец в моем фрейме данных, значения которого зависят от существующего столбца («Sum of Pillar».

-> WithSumIDAPillars <- maml.mapInputPort (1) </p>

-> WithSumIDAPillars ["newcolumn"] <- NA </p>

-> WithSumIDAPillars $ newcolumn <- if (WithSumIDAPillars $ Сумма Столпа <5 = "Низкий"; WithSumIDAPillars $ Сумма Столба <= 6 <= 10 ="Medium"; WithSumIDAPillars $ Sum of Pillar <= 11 <= 16 = "High" </p>

Мне нужно создать новый столбец, который бы устанавливал следующие требования: Если значение "Sum of PIllar" находится в диапазоне от 0 до5 = Низкий, 6-11 = Средний и 11-16 = Высокий.

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Альтернативный, возможно, менее элегантный метод, чем case_when, использует вложенные операторы if_else.Возможно, единственным преимуществом является то, что вам не нужно слишком много внимания уделять ордеру или заявлениям, как вы делаете с case_when.

library(tidyverse)

WithSumIDAPillars %>%
    mutate(new_col = if_else(`Sum of the Pillar` >= 0 & <= 5, "Low",
                             if_else(`Sum of the Pillar` >= 6 & <= 11, "Medium",
                                     if_else(`Sum of the Pillar` >= 12 & <= 18, "High",
                                             NA))))

NB - существует перекрытие между вашим верхним средним и нижним высокимпороги, поэтому я поднял нижнюю границу для High до 12.

0 голосов
/ 10 февраля 2019

Вы использовали пакет dplyr?Будет ли что-то подобное этой работе?

library("dplyr")

WithSumIDAPillars$newcolumn <- 
  case_when(
    WithSumIDAPillars$`Sum of Pillar` <= 6 ~ "Low",
    WithSumIDAPillars$`Sum of Pillar` <= 11 ~ "Medium",
    WithSumIDAPillars$`Sum of Pillar` <= 16 ~ "High",
    TRUE ~ NA_character_
  )

Функция case_when() последовательно обрабатывает каждый случай до тех пор, пока одно из выражений в левой части ~ не станет равным TRUE, поэтому последний операториспользуется в качестве значения по умолчанию.

В зависимости от вашего приложения, может быть проще назвать ваш столбец sum_of_pillar, используя подчеркивание.Это упростило бы использование pipe (%>%) и функции mutate() для более краткой записи:

WithSumIDAPillars <- 
  WithSumIDAPillars %>%
  mutate(
    newcolumn = case_when(
      sum_of_pillar <=  5 ~ "Low",
      sum_of_pillar <= 11 ~ "Medium",
      sum_of_pillar <= 16 ~ "High",
      TRUE ~ NA_character_
    )
  )

Чтобы узнать больше о dplyr, вы можете посетить веб-сайт: https://dplyr.tidyverse.org/ или (бесплатно) R для книги по науке о данных: https://r4ds.had.co.nz/

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...