You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R按区域办公室可视化各区域TOP5合作方

解决按区域办公室生成TOP5合作方柱状图的问题

我明白你现在的困扰——本来以为是个简单的任务,结果卡在按区域筛选TOP5合作方,还不知道怎么把绘图逻辑串起来。咱们一步步来搞定它:

第一步:修正数据格式并模拟完整数据集

首先你的示例数据里字符型变量没加引号,R会把它们当成对象,先修正成可运行的格式:

# 模拟你提供的示例数据
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")
MY_df <- data.frame(Partner, Region_Off)

第二步:按区域筛选TOP5合作方

你之前的代码核心问题是没有按区域分组计算,导致得到的是全局TOP5而非每个区域的TOP5。用dplyr的分组操作可以轻松解决:

library(dplyr)

# 按区域分组,统计每个合作方的数量,取每个区域的TOP5
top_partners_by_region <- MY_df %>%
  group_by(Region_Off, Partner) %>%
  tally(sort = TRUE) %>%  # tally等价于count,sort=TRUE直接按数量降序排列
  slice_head(n = 5) %>%   # 每个组取前5个
  ungroup()  # 取消分组,方便后续绘图

第三步:绘制分区域柱状图

现在用ggplot2绘制柱状图,为了让每个区域的柱子按合作方数量排序,我们可以用reorder()调整x轴顺序,再用分面展示不同区域:

library(ggplot2)

ggplot(top_partners_by_region, aes(x = reorder(Partner, n), y = n)) +
  geom_bar(stat = "identity", fill = "#2E86AB") +  # 绘制柱状图
  coord_flip() +  # 翻转坐标轴,让长名称更易读
  facet_wrap(~Region_Off, scales = "free_y") +  # 按区域分面,free_y避免空类别占空间
  labs(x = "合作方", y = "合作次数", title = "各区域办公室TOP5合作方") +
  theme_minimal()

为什么你的原有代码行不通?

  • 第一个代码:count(Partner)没有按Region_Off分组,统计的是全局所有合作方的数量,之后的facet_wrap只是把全局TOP5重复分到各个区域,完全不是你要的效果。
  • 第二个代码:apply是按列处理数据,逻辑上就不对——你需要的是按区域分组取TOP5,而不是对每一列单独排序取前5。

这样运行下来,就能得到每个区域独立的TOP5合作方柱状图了!

内容的提问来源于stack exchange,提问作者BloopFloopy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:57:19