【问题标题】:Calculating a ratio in a ggplot2 graph while retaining faceting variables在保留分面变量的同时计算 ggplot2 图中的比率
【发布时间】:2021-06-18 21:28:40
【问题描述】:

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

类似这样的:

widget_ind employee_active_ind employee_id day product_type employee_bu
1 1 123 6/1/2021 pc americas
0 1 234 6/1/2021 mac emea
0 1 345 6/1/2021 mac apac
1 1 444 6/1/2021 mac americas
1 1 333 6/1/2021 pc emea
0 1 356 6/1/2021 pc americas

我试图找出 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 记录中的数字,然后对该集合求和并显示结果。我要添加的皱纹是除以当天在职员工的数量,虽然你可以在某一天让一些人出去,但你永远不会让所有人都出去。但这不是 ggplot 正在做的事情吗?

【问题讨论】:

  • 您应该只使用 ggplot 进行绘图,而不是计算值,因为您没有那么多控制权。请在reproducible format 中分享您的数据,例如dput(),以便我们可以复制/粘贴到 R 中进行测试。您希望为样本数据绘制什么值? employee_active_ind 的值是否为 0?

标签: r ggplot2


【解决方案1】:

我同意 MrFlick 的观点 - 特别是关于 employee_active_ind of 0 的问题。如果你有它们,这可能会创建 NA 值,其中某些值除以 0。

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 2020-01-09
    • 2020-09-08
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2012-03-15
    相关资源
    最近更新 更多