【问题标题】:How to group multiple columns together and plot a bar graph?如何将多列组合在一起并绘制条形图?
【发布时间】:2020-09-29 17:18:05
【问题描述】:

我有一个使用splitstackshape 包拆分的数据框。拆分后,我无法继续对多个列进行分组并绘制条形图。代码如下,

library(tidyverse)
library(splitstackshape)
df <- data.frame(countries=(c("England","Australia,Pakistan", "India,England","Denmark", "",
                             "Australia, Pakistan, New Zealand, England", "United States, England,Pakistan")))
data_split <- splitstackshape::cSplit(df, "countries", ",")
data_split

输出如下,

countries_1       countries_2 countries_3     countries_4
1:       England        <NA>        <NA>        <NA>
2:     Australia    Pakistan        <NA>        <NA>
3:         India     England        <NA>        <NA>
4:       Denmark        <NA>        <NA>        <NA>
5:          <NA>        <NA>        <NA>        <NA>
6:     Australia    Pakistan New Zealand     England
7: United States     England    Pakistan        <NA>

通过上述输出,我希望绘制一个条形图,其中包含按降序排列的国家/地区的频率。示例输出如下, bar chart showing frequency of countries in descending order

【问题讨论】:

标签: r ggplot2 grouping bar-chart multiple-columns


【解决方案1】:

像这样:

library(tidyverse)
library(ggplot2)

df %>% 
  separate_rows(countries, sep = ",") %>% 
  count(countries) %>% 
  ggplot(aes(y = fct_reorder(countries, n), x = n)) +
  geom_col()


根据评论编辑:仅绘制 10 个最常见的国家/地区:

df %>% 
  separate_rows(countries, sep = ",") %>% 
  count(countries) %>% 
  slice_max(n, n = 10) %>% 
  ggplot(aes(y = fct_reorder(countries, n), x = n)) +
  geom_col()

【讨论】:

  • 知道了,先生。但我正在处理的实际数据集有 120 多个国家。因此,当我运行输出时,整个图表完全重叠。我希望只显示前 10 个国家,因为前 10 个国家之后的国家频率非常少。如何将该步骤合并到代码中?
  • 将此行添加slice_max(n, n = 10) %&gt;% count 的行(请参阅更新的答案)
  • 非常感谢您回答我的第一个问题。意义重大。
  • 不客气!如果它回答了您的问题,请考虑通过单击旁边的复选标记来接受我的回答。
猜你喜欢
  • 1970-01-01
  • 2021-10-13
  • 2019-08-16
  • 2021-01-12
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多