У меня есть 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 "