【问题标题】:Create a ggplot with grouped factor levels创建具有分组因子水平的 ggplot
【发布时间】:2018-05-24 16:21:57
【问题描述】:

这是此处提出的问题的变体:Group factor levels in ggplot

我有一个数据框:

df <- data.frame(respondent = factor(c(1, 2, 3, 4, 5, 6, 7)),
                 location = factor(c("California", "Oregon", "Mexico",
                                     "Texas", "Canada", "Mexico", "Canada")))

与美国相关的三个不同级别。我不想折叠它们,因为状态之间的区别对数据分析很有用。但是,我想要一个基本的条形图,它结合了美国的三个州并将它们相互堆叠,因此条形图中有三个条形图——加拿大、墨西哥和美国——美国条形图分开分为三种状态:

如果州因素级别的名称中包含“US”,例如“美国:加利福尼亚”,我可以使用

library(tidyverse)
with_states <- df %>%
separate(location, into = c("Country", "State"), sep = ": ") %>%
  replace_na(list(State = "Other")) %>%
  mutate(State = as.factor(State)
         %>% fct_relevel("Other", after = Inf))

达到预期的结果。但是当 R 不知道这三个州在美国时,这怎么能做到呢?

【问题讨论】:

  • 您可能必须创建一个使用字典(即查找表)的进程才能更新location 变量。如果位置是美国的一部分,则名称应更新为 US: location。然后,您可以使用您发布的代码来实现预期的结果。

标签: r ggplot2


【解决方案1】:

如果您查看前面的示例,所有separatereplace_na 函数所做的就是将location 变量分成countrystate 变量:

df

  respondent       location
1          1 US: California
2          2     US: Oregon
3          3         Mexico
...

df %>%
    separate(location, into = c("Country", "State"), sep = ": ") %>%
    replace_na(list(State = "Other"))

  respondent Country      State
1          1      US California
2          2      US     Oregon
3          3  Mexico      Other
...

因此,如果将您的数据转换为这种格式,您真正需要做的就是:一列代表国家,一列代表州/普罗旺斯。

有很多方法可以自己做到这一点。很多时候,您的数据已经采用这种格式。如果不是,修复它的最简单方法是连接到将位置映射到国家/地区的表:

df
  respondent   location
1          1 California
2          2     Oregon
3          3     Mexico
4          4      Texas
5          5     Canada
6          6     Mexico
7          7     Canada

state_mapping <- data.frame(state = c("California", "Oregon", "Texas"),
                            country = c('US', 'US', 'US'),
                            stringsAsFactors = F)

df %>%
    left_join(state_mapping, by = c('location' = 'state')) %>%
    mutate(country = if_else(is.na(.$country),
                             location,
                             country))


  respondent   location country
1          1 California      US
2          2     Oregon      US
3          3     Mexico  Mexico
4          4      Texas      US
5          5     Canada  Canada
6          6     Mexico  Mexico
7          7     Canada  Canada

一旦你得到了这种格式,你就可以按照其他问题的建议去做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2020-12-07
    • 2014-10-30
    相关资源
    最近更新 更多