【问题标题】:geom_hist after using purrr::pmap to sample使用 purrr::pmap 采样后的 geom_hist
【发布时间】:2018-01-29 14:23:25
【问题描述】:

我想使用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 四分位数的参考线?

【问题讨论】:

    标签: r ggplot2 dplyr purrr


    【解决方案1】:

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

    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))
    

    【讨论】:

    • mutate(rnorm_data = pmap(list(n, mean, sd), rnorm)) 是我的关键。 gather(stat, value, median:quart3rd) 也是一大块。真的很棒的答案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多