使用 summarize_all 与 colMeans 和 colVar 在 R 中创建旋转 table

Using summarize_all with colMeans and colVar to create pivoted table in R

我想对以下数据使用 summarize_all 并创建我想要的输出,但我很好奇如何使用 tidy 方法使用变异和总结的某种组合来做到这一点?感谢任何帮助!!

dummy <- tibble(
  a = 1:10,
  b = 100:109,
  c = 1000:1009
)

期望的输出

tibble(
  Mean = colMeans(dummy[1:3]),
  Variance = colVars(as.matrix(dummy[1:3])),
  CV = Variance/Mean
)
    Mean Variance      CV
   <dbl>    <dbl>   <dbl>
1    5.5     9.17 1.67   
2  104.      9.17 0.0877 
3 1004.      9.17 0.00913

reshape 成'long' 格式然后按'name'

分组后再做一次会更容易
library(dplyr)
library(tidyr)
pivot_longer(dummy, cols = everything()) %>% 
  group_by(name) %>% 
  summarise(Mean = mean(value), Variance = var(value), CV = Variance/Mean) %>%
  select(-name)
# A tibble: 3 x 3
#    Mean Variance      CV
#   <dbl>    <dbl>   <dbl>
#1    5.5     9.17 1.67   
#2  104.      9.17 0.0877 
#3 1004.      9.17 0.00913

或者使用 summarise_allsummarise/across,但输出将是单行,然后进行整形

dummy %>% 
   summarise(across(everything(), list(Mean = mean,
         Variance = var, CV = ~ mean(.)/var(.)))) %>%
   pivot_longer(everything()) %>% 
   separate(name, into = c('name', 'name2')) %>% 
   pivot_wider(names_from = name2, values_from = value)