dplyr :: case_when при выдаче предупреждений о RHS случаев, которые не должны оцениваться - PullRequest
0 голосов
/ 01 мая 2019

У меня есть tibble, где один столбец - это упорядоченный множитель, содержащий имена компонентов разложенного временного ряда;Я хочу изменить это, потому что они не легко понятны («уровень», на мой взгляд, не так ясен, как «тренд», а «еженедельный» и «ежегодный» лучше называть «сезон1» и «сезон2»)).

Иногда я получаю «season1» и «season2», но иногда просто «сезон».Я использую dplyr::mutate, dplyr::case_when и forcats::fct_recode.В случае, когда первый вариант оператора case_when совпадает, я ожидаю, что он не будет обращать внимания на другие.

Однако в случае, когда я тестирую данный уровень и затем изменяю имя того же уровня, он выдает предупреждение

"Предупреждение: неизвестные уровни в f "

об изменении уровня в следующем случае.Я знаю, что это только предупреждение, и вывод правильный, но меня это раздражает, и я хочу знать, что я сделал неправильно.

Я использую dplyr 0.8.0.1 и forcats 0.4.0 для R 3.4.4.

# This throws a warning about unknown levels: a

library(dplyr)
library(forcats)

d <- tibble(a = 1:3, b = as.ordered(c("ab", "d", "e")))

d %>%
  mutate(b = case_when(
    "ab" %in% levels(b) ~ fct_recode(b, foo = "ab"),
    "a" %in% levels(b) ~ fct_recode(b, bar = "a"),
    TRUE ~ b
  ))
# This doesn't generate a warning

library(dplyr)
library(forcats)

d <- tibble(a = 1:3, b = as.ordered(c("ab", "d", "e")))

d %>%
  mutate(b = case_when(
    "ab" %in% levels(b) ~ fct_recode(b, foo = "ab"),
    "a" %in% levels(b) ~ fct_recode(b, bar = "d"),
    TRUE ~ b
  ))

Ожидаемый результат: b имеет уровни "foo", "d" и "e" без жалоб.

Фактический результат: уровни правильные, но "## Предупреждение: неизвестноуровни в f: a "

...