library(presenter)
library(dplyr)
Transpose a tibble of summary statistics in tidy format. Convenient function for transposing the output of dplyr"s group_by
and summarize
operation.
Transpose a 1 row numerical summary:
wide format
%>%
iris summarize(across(where(is.numeric), mean), .groups = "drop") -> sumr0
sumr0#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> 1 5.843333 3.057333 3.758 1.199333
long format
%>%
sumr0 pivot_summary()
#> # A tibble: 4 × 2
#> column V1
#> <chr> <dbl>
#> 1 Sepal.Length 5.84
#> 2 Sepal.Width 3.06
#> 3 Petal.Length 3.76
#> 4 Petal.Width 1.20
A grouped summary can be transposed by providing the name of the group column.
wide format
%>%
iris group_by(Species) %>%
summarize(across(where(is.numeric), mean), .groups = "drop") -> sumr1
sumr1#> # A tibble: 3 × 5
#> Species Sepal.Length Sepal.Width Petal.Length Petal.Width
#> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 setosa 5.01 3.43 1.46 0.246
#> 2 versicolor 5.94 2.77 4.26 1.33
#> 3 virginica 6.59 2.97 5.55 2.03
long format
%>%
sumr1 pivot_summary(Species)
#> # A tibble: 4 × 4
#> column setosa versicolor virginica
#> <chr> <dbl> <dbl> <dbl>
#> 1 Sepal.Length 5.01 5.94 6.59
#> 2 Sepal.Width 3.43 2.77 2.97
#> 3 Petal.Length 1.46 4.26 5.55
#> 4 Petal.Width 0.246 1.33 2.03
Supports transposing numerical summaries with multiple groups using tidyselect.
long format
%>%
iris mutate(Species1 = sample(Species)) %>%
group_by(Species, Species1) %>%
summarize(across(where(is.numeric), mean), .groups = "drop") -> sumr2
sumr2#> # A tibble: 9 × 6
#> Species Species1 Sepal.Length Sepal.Width Petal.Length Petal.Width
#> <fct> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 setosa setosa 5.13 3.61 1.46 0.269
#> 2 setosa versicolor 4.99 3.34 1.46 0.217
#> 3 setosa virginica 4.93 3.38 1.47 0.258
#> 4 versicolor setosa 5.92 2.78 4.34 1.32
#> 5 versicolor versicolor 5.94 2.78 4.23 1.35
#> 6 versicolor virginica 5.95 2.75 4.2 1.3
#> 7 virginica setosa 6.73 3.11 5.73 2.08
#> 8 virginica versicolor 6.62 2.92 5.44 1.95
#> 9 virginica virginica 6.42 2.87 5.44 2.02
Group names are concatenated and pivoted.
wide format
%>%
sumr2 pivot_summary(matches("Spec"))
#> # A tibble: 4 × 10
#> column setosa_setosa setosa_versicolor setosa_virginica versicolor_seto…
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Sepal.Length 5.13 4.99 4.93 5.92
#> 2 Sepal.Width 3.61 3.34 3.38 2.78
#> 3 Petal.Length 1.46 1.46 1.47 4.34
#> 4 Petal.Width 0.269 0.217 0.258 1.32
#> # … with 5 more variables: versicolor_versicolor <dbl>,
#> # versicolor_virginica <dbl>, virginica_setosa <dbl>,
#> # virginica_versicolor <dbl>, virginica_virginica <dbl>