我想使用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个四分位数?
答案 0 :(得分:2)
您可以使用unnest()
整理数据,但为此需要将pmap
- 调用分配给您的df中的列(例如,在mutate
- 调用内)。< / p>
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))