geom_hist 使用 purrr::pmap 采样后

geom_hist after using purrr::pmap to sample

我想使用 purrr::pmap 生成的结果绘制带有某些四分位数参考线的直方图。

我有以下数据

   mean    sd     n
  <dbl> <dbl> <dbl>
  5.00  3.00   100
  4.00  1.00   100
  4.00  2.00   100

这里的数据是方便复制粘贴的格式

df <- tribble(
  ~mean,  ~sd,   ~n,
  5.00,  3.00,   100,
  4.00,  1.00,   100,
  4.00,  2.00,   100)

我目前的代码是

df %>% pmap(rnorm) 

问题是我现在有嵌套列表而不是整洁的数据框。如何整理我必须绘制 3 个直方图及其中位数、第 1 和第 3 个四分位数的参考线?

您可以使用 unnest() 整理数据,但为此需要将 pmap-调用分配给 df 中的列(例如,在 mutate - 调用中) .

library(tidyverse)

df <- df %>% 
  mutate(rnorm_data = pmap(list(n, mean, sd), rnorm)) %>% 
  group_by(mean_sd = interaction(mean, sd, sep = "_")) %>% 
  unnest() 

df
# A tibble: 300 x 5
# Groups:   mean_sd [3]
#     mean    sd     n mean_sd rnorm_data
#    <dbl> <dbl> <dbl>  <fctr>      <dbl>
#  1     5     3   100     5_3   4.737157
#  2     5     3   100     5_3   5.221150
#  3     5     3   100     5_3   3.855733
#  4     5     3   100     5_3   8.965053
#  5     5     3   100     5_3   2.608563
#  6     5     3   100     5_3  11.940414
#  7     5     3   100     5_3   8.213685
#  8     5     3   100     5_3   6.332804
#  9     5     3   100     5_3   6.233713
# 10     5     3   100     5_3   4.758685
# # ... with 290 more rows

我添加了 group_by 以供稍后在 ggplot 调用中参考并总结以下数据:

df_summarized <- df %>% 
  summarize(median = median(rnorm_data), 
            quart1st = quantile(rnorm_data, 0.25), 
            quart3rd = quantile(rnorm_data, 0.75)) %>% 
  gather(stat, value, median:quart3rd) 

通过使用 gather,我可以为不同的汇总统计信息提供不同的 linetypes

ggplot(df, aes(rnorm_data, fill = mean_sd, color = mean_sd)) + 
  geom_histogram() + 
  geom_vline(data = df_summarized, 
             aes(xintercept = value, linetype = stat, color = mean_sd))