我有tibble
一个列是一个有序因子,其中包含分解的时间序列的组件的名称;我想更改这些,因为它们不容易理解(在我看来,“级别”不像“趋势”那样清晰,而且“每周”和“每年”比“季节 1”和“季节 2”更好)。
有时我得到“season1”和“season2”,但有时只是“season”。我正在使用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”