管道,将数值转换为保留未观察到的水平的因子

时间:2019-02-25 19:04:33

标签: r dplyr numeric magrittr

mtcars$gear中,观察到的唯一数字是3、4和5。我想将其转换为以下因子:

  • “中国” = 1
  • “法国” = 2
  • “俄罗斯” = 3
  • “英国” = 4
  • “美国” = 5

然后我要对其进行绘图,以便我们看到“中国”和“法国”的值为0。

我想通过管道做所有事情。

mtcars %>% 
  mutate(gear = factor(gear, labels = list("China" = 1, "France" = 2, "Russia" = 3, "UK" = 4, "USA" = 5))) %>% 
  group_by(gear) %>% 
  summarize(Count = n()) %>%
  ggplot() +
  geom_col(aes(x = gear, y = Count))

"Error in mutate_impl(.data, dots) : 
   Evaluation error: invalid 'labels'; length 5 should be 1 or 3."

这类似于Changing factor levels with dplyr mutate,除了我想包含不可观察的值。

1 个答案:

答案 0 :(得分:1)

在确保不会丢失未观察到的值的同时正确使用级别和标签可以解决此问题。所有功劳:@joran和@markus

mtcars %>% 
  mutate(gear = factor(gear, levels = 1:5, labels = c("China","France","Russia","UK","USA"))) %>% 
  ggplot() +
  geom_bar(aes(x = gear)) +
  scale_x_discrete(drop = FALSE)