首页 > 解决方案 > 在保留分面变量的同时计算 ggplot2 图中的比率

问题描述

所以我认为以前没有人问过这个问题,但是 SO 搜索可能只是被“比率”和“刻面”的组合弄糊涂了。我正在尝试计算生产率比率;在给定的日期或时间段内为工人数量生产的小部件数量。我将我的数据结构化在一个数据框中,每个小部件每天由每个工人在其自己的记录中生成,其他工人当天工作但在他们自己的记录中也没有生成小部件,以及各种元数据。

像这样的东西:

widget_ind employee_active_ind 员工ID 产品类别 employee_bu
1 1 123 2021 年 6 月 1 日 个人电脑 美洲
0 1 234 2021 年 6 月 1 日 苹果电脑 欧洲、中东和非洲
0 1 345 2021 年 6 月 1 日 苹果电脑 亚太地区
1 1 444 2021 年 6 月 1 日 苹果电脑 美洲
1 1 333 2021 年 6 月 1 日 个人电脑 欧洲、中东和非洲
0 1 356 2021 年 6 月 1 日 个人电脑 美洲

我试图找到widget_inds与employee_active_inds的比率,随着时间的推移,同时保留元数据,以便我可以在ggplot2代码中过滤或分面,例如:

plot <- ggplot(data = df[df$employee_bu == 'americas',],aes(y = (widget_ind/employee_active_ind), x = day)) +
  geom_bar(stat = 'identity', position = 'stack') +
  facet_wrap(product_type ~ ., scales = 'fixed') +  #change these to look at different cuts of metadata

print(plot)

保留元数据很有吸引力,而不是通过各种组合对单个数据框进行总结,但是没有分面的结果甚至都不正确(例如,ggplot 显示的条形图高度为每人约 18 个小部件;创建一个汇总数据框没有分面显示每人少于 1 个小部件的比率)。

我目前在运行 ggplot 代码时遇到此错误:

Warning message:
Removed 9865 rows containing missing values (geom_bar). 

哪个没有意义,因为在我的数据框中, widget_ind 和 employee_active_ind 都没有 NA 值,所以计算两者的比率应该总是有效的?

编辑1:澄清employee_active_ind:我不应该有任何employee_active_ind = 0,但我当前的连接会产生它们(并且它通过了现实嗅探测试;我们尝试建模的过程允许您在第1天进行工作,从而产生一个小部件在第 2 天,您可能不做任何工作,因此当天不会被视为活跃)。我想我需要重新考虑我的数据结构。即便如此,我在这里假设 ggplot2 的行为就像给定条形图一样;它在给定的一天(以及任何方面和过滤器)中获取每个 widget_ind 记录中的数字,然后对该集合求和并显示结果。我要添加的皱纹是除以当天在职员工的数量,虽然你可以在某一天让一些人出去,但你永远不会让所有人都出去。但那不是

标签: rggplot2

解决方案


我同意 MrFlick 的观点——尤其是关于employee_active_ind0 的问题。如果你有它们,这可能会产生 NA 值,其中某些值除以 0。


推荐阅读