【发布时间】:2020-09-14 10:36:46
【问题描述】:
我有一些数据,我想使用 tidyverse 方法获取多个列的汇总统计信息。但是,利用 tidyverse 的 summarize 函数,它会将每个列统计信息创建为一个新列,而我更愿意将列名视为行,将每个统计信息视为一个新列。所以我的问题是:
有没有比在summarize 函数中加上pivot_longer 和pivot_wider 更优雅(我知道“优雅”是一个模糊的术语)的方式来实现这一点?
我正在使用 tidyverse 软件包的最新开发版本,即 dplyr 0.8.99.9003 和 tidyr 1.1.0。 因此,如果任何解决方案都需要这些软件包中尚未出现在 CRAN 上的新功能,那很好。
library(tidyverse)
dat <- as.data.frame(matrix(1:100, ncol = 5))
dat %>%
summarize(across(everything(), list(mean = mean,
sum = sum))) %>%
pivot_longer(cols = everything(),
names_sep = "_",
names_to = c("variable", "statistic")) %>%
pivot_wider(names_from = "statistic")
预期结果:
# A tibble: 5 x 3
variable mean sum
<chr> <dbl> <dbl>
1 V1 10.5 210
2 V2 30.5 610
3 V3 50.5 1010
4 V4 70.5 1410
5 V5 90.5 1810
注意:我没有设置任何列的名称,所以如果有一个很好的方法来获取具有不同/通用名称的表结构,那也很好。
【问题讨论】: