【问题标题】:R: Calculate percentages within groupsR:计算组内百分比
【发布时间】:2021-04-09 12:36:36
【问题描述】:

我有一个由两个调查机构 A + B 在很长一段时间(几年)内进行的访谈列表和一个相应的日期变量:

date_of_interview  institute
--------------------------
2021-04-01         A
2021-04-01         A
2021-04-02         A
2021-04-02         A
2021-04-02         A
2021-04-02         B
2021-04-02         B
2021-04-02         B
etc.

所有面试应平均分布在工作日(周一至周五)。为了检查这一点,我想在 x 轴上创建以下带有时间变量的图形(从 1 到 52 的日历周):

library(tidyverse)

df <- df %>% mutate(weekday = format(date_of_interview, "%u"),
              week = format(date_of_interview, "%V")) 

但是,我很难计算周组中工作日的百分比。所有工作日都应在 20% 左右(周一至周五)。

ggplot(aes(x = week, fill = weekday, group = weekday)) + 
  geom_bar(position = "stack") +
  facet_wrap(institute ~.)

【问题讨论】:

  • 但是y轴是什么意思?
  • Y轴表示一周内每一天的百分比。虚线区域可以是星期三,例如:如果 A 机构在星期一进行了 20 次采访,在第 1 周进行了 100 次采访,则该字段应为 20%,以此类推

标签: r dplyr tidyverse


【解决方案1】:

据我了解,您希望每个方面都成为一个机构,每个组每个方面都成为一个工作日,而填充物就是工作日本身。如果我理解错了,您可以随意调整它们以满足您的要求。

library(dplyr)
library(ggplot2)

df <- df %>% 
  mutate(
    week = format(date_of_interview, "%V"),
    weekday = format(date_of_interview, "%u"),
    .keep='unused'
  ) %>% 
  group_by(institute, week, weekday) %>% 
  summarise(n = n()) %>% 
  mutate(freq = n / sum(n), .keep='unused') %>% 
  ungroup()
  
ggplot(df, aes(x=week, y=freq, fill=weekday)) + 
  geom_bar(stat='identity') +
  facet_wrap(institute ~.)

我在这个数据框上测试过:

df <- data.frame(
  date_of_interview = as.Date(c(
    '2021-04-01', '2021-04-01', '2021-04-02', '2021-04-02', 
    '2021-04-02', '2021-04-02', '2021-04-02', '2021-04-02', 
    '2021-04-09', '2021-04-10', '2021-04-11')),
  institute = c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'A')
)

【讨论】:

  • 当然,我翻转了group_by 操作以从研究所开始,然后是星期,然后是工作日。如果您需要,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2016-02-22
  • 2015-09-29
相关资源
最近更新 更多