Hi Everyone,
I'm in psychology and we often want to create tables of summary statistics (mean,sd, etc) for all the variables in a data set. I know there are many other packages that can do so - but I'm trying to find a way to generate a descriptive summary table using the tidyverse/across/summarise.
I have a working solution - but it seems a bit long and convoluted. Can anyone suggest more efficient code? See example below you paste right into the Console.
Hopefully there is a shorter more efficient way to obtain this output. It seems like I should be able to get from row_sum to wide_summary using a single pivot (or similar command) rather than the two pivot commands below. In general, I think I may be talking the long way around to getting this table. If I'm not taking the long way around - that would be great to know too! My goal is to avoid giving my graduate/undergraduate classes poor code.
Thanks for any insights!
Cheers,
David
library(tidyverse)
mean_sd <- list(
mean = ~mean(.x, na.rm = TRUE),
sd = ~sd(.x, na.rm = TRUE)
)
row_sum <- attitude %>% summarise(across(everything(), mean_sd))
long_summary <- row_sum %>% pivot_longer(cols = everything(),
names_to = c("var", "stat"),
names_sep = c("_"),
values_to = "value")
wide_summary <- long_summary %>% pivot_wider(names_from = stat,
values_from = value)
print(wide_summary)
wide_summary
A tibble: 7 x 3
#var mean sd
#
#1 rating 64.6 12.2
#2 complaints 66.6 13.3
#3 privileges 53.1 12.2
#4 learning 56.4 11.7
#5 raises 64.6 10.4
#6 critical 74.8 9.89
#7 advance 42.9 10.3