【问题标题】:R: How to visualize the top 5 values in a given column across regionsR:如何跨区域可视化给定列中的前 5 个值
【发布时间】:2018-05-26 06:04:07
【问题描述】:

这是一个我认为是一件容易的任务的问题,但我仍然无法解决这个问题。

我想制作一个情节,其中列出了给定组织的前五名合作伙伴。区域办事处。 请记住,在我的实际数据中,有 700 多个合作伙伴 5 个区域办事处。

假设我的数据如下所示,其中我有 8 个合作伙伴值:

Partner <- c(A, B, C, D, E, F, G, A, A, B, B, C, D, E, G, G, H, I, F)
Region_Off <-c(AU, BE, CA, DK, EU, FR, GER, AU, AU , BE, BE, CA, DK, EU, 
GER, GER, HK, IR, FR)

我试图做的事情:

Top_Partners <- MY_df %>%
  count(Partner)%>%
  arrange(Partner) %>%
  arrange(n) %>%
  head(n=5) %>%
  facet_wrap(~ Region_Off)

我已经试过了:

Top_Partners <- MY_df %>%
  select(Region_abb, Partner, Context)

dat2 <- as.data.frame(apply(Top_Partners, 2, function (x) sort(x, decreasing = TRUE)[1:5]))

但是,我似乎无法弄清楚如何做这个公关。区域办事处...

然后以某种方式绘制它以制作条形图 - 尽管我不确定在上述解决方案中在哪里绘制函数 geom_bar。

我希望有人可以帮助我从这里继续前进。

谢谢

【问题讨论】:

  • 您发布的数据中有 19 个Partner 和 20 个Region_Off。此外,如果你想要顶部(最频繁),你需要tail,而不是head

标签: r ggplot2 dplyr


【解决方案1】:

由于您的示例不可重现,因此很难回答您的问题。我们需要MY_df 的一个子集,并知道Context 变量是什么。

下面的数据框是你想要得到的吗?

set.seed(123)
df <- data_frame(
  Region_Off = sample(c("AU", "BE", "CA", "DK", "EU", "FR", "GER", "HK", "IR"), 500, replace = T),
  Partner = sample(LETTERS[1:8], 500, replace = T)
)

df %>% 
  group_by(Region_Off) %>% 
  count(Partner) %>% 
  arrange(desc(n)) %>% 
  slice(1:5)

【讨论】:

  • 嗨 nael_kl - 看起来像我正在尝试做的事情,但是,当我使用 slice 时,我收到错误消息: UseMethod("slice") 中的错误:'slice' 没有适用的方法应用于“c('grouped_df', 'tbl_df', 'tbl', 'data.frame')”类的对象
  • 我还添加了 Context 变量,这是一个二分变量(人道主义和发展) - 如果没有 Context,我无法运行序列...我收到一条错误消息,提示此变量丢失
  • 如果我们无法重现问题,恐怕我们无能为力。您能否向我们提供您的数据框或至少触发此错误消息的子集?例如,您可以使用dput(MY_df)
  • 嗨 nael_kl - 我添加了我的数据框的快照。我有 5000 多个 obs 和 30 行,所以很多,为什么我试图将其浓缩为我上面原始问题中使用的示例。
  • 关于错误消息“UseMethod(“slice”)中的错误:没有适用于“slice”的适用方法应用于类“c('grouped_df','tbl_df','tbl', 'data.frame')" 我通过指定 slice 来自 dplyr 解决了这个问题,而不是任何其他带有已加载命名空间的包。您可以使用 dplyr::slice(1:5)
【解决方案2】:

只回答了问题的第二部分,以制作条形图。

用于聚合数据的代码是@nael_kl 的答案中的代码。

library(tidyverse)
library(ggplot2)

df3 <- df %>% 
  group_by(Region_Off) %>% 
  count(Partner) %>% 
  arrange(desc(n)) %>% 
  slice(1:5)

ggplot(df3, aes(Partner, n)) +
    geom_bar(stat = "identity") +
    facet_wrap(~ Region_Off)

【讨论】:

  • 嗨锐 - 谢谢你的帮助。正如我在上面所写的, slice () 函数似乎不适用 - 我该如何从这里继续?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 2023-03-12
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多