【发布时间】:2019-09-18 11:25:28
【问题描述】:
我正在尝试使用purrr/tibble 方法生成一个汇总统计表。我可以使用以下方法计算分组平均值 (sd) 和计数:
library(dplyr)
library(tidyr)
library(purrr)
library(tibble)
mtcars %>%
gather(variable, value, -vs, -am) %>%
group_by(vs, am, variable) %>%
nest() %>%
filter(variable %in% c("mpg", "hp")) %>%
mutate(
mean = map_dbl(data, ~mean(.$value, na.rm = TRUE)),
sd = map_dbl(data, ~sd(.$value, na.rm = TRUE)),
n = map_dbl(data, ~sum(!is.na(.$value)))
) %>%
select(vs:variable, mean:n) %>%
mutate_at(vars(mean, sd), round, 3) %>%
mutate(mean_sd = paste0(mean, " (", sd, ")"),
var_group = paste(vs, am, variable, sep = "_")) %>%
select(n:var_group) %>%
nest(n, mean_sd, .key = "summary") %>%
spread(key = var_group, value = summary) %>%
unnest()
我的直接问题是,如何在unnest()-ed 输出中保留spread(key = var_group, value = summary) 中的列名?
编辑:感谢大家的回复。
https://stackoverflow.com/a/55912326/5745045 的优点是更易于阅读且不存储临时变量。一个缺点是在n 列中将数字更改为字符。
最终目标是在分组kable 表的上下文中用格式化文本替换列名。
【问题讨论】:
-
如果你查看每一列,它是一个
tibble,有自己的列名。所以,不确定你想要的预期输出是什么 -
可能在
spread步骤之后%>% gather %>% unnest %>% gather(key1, val, n, mean_sd) %>% unite(key, key, key1) %>% spread(key, val) %>% retypelibrary(hablar) -
或者另一个选项是
%>% imap_dfc(., ~ {nm1 <- .y; .x %>% pluck(1) %>% rename_all(~ str_c(.x, "_", nm1))}) -
在这种情况下,注释的应该可以工作
-
@akrun 这非常合理。尝试返回
0.3.0,但无法安装依赖项。无论如何,感谢您的调查。
标签: r dplyr tidyverse tidyr purrr