我尝试使用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)
中的列名?
edit:感谢所有的回复。https://stackoverflow.com/a/55912326/5745045的优点是更容易阅读,不存储临时变量。缺点是n
列中的数字到字符的变化。
最终目标是在分组的kable
表的上下文中用格式化文本替换列名。
2条答案
按热度按时间2fjabf4q1#
通过将 “nested”
tibble
存储为临时变量1并使用它的colnames
2,我们可以实现您想要的。yws3nbqq2#
这里有另一个不需要创建临时变量的方法,我没有在最后嵌套数据,而是使用
gather()
和unite()
来重构数据,这样它就变成了一个键和值对。创建于2019-04-29由reprex package(v0.2.1)