You can manually generate your descriptives using dplyr
or you can use describeBy
or tapply
to automatically print a table.
library(tidyverse)
library(psych)
data(iris)
## dplyr from zephryl's comment
iris %>%
group_by(Species) %>%
summarize(across(Sepal.Length, list(mean = mean, min = min, max = max), n = n()))
#> # A tibble: 3 × 4
#> Species Sepal.Length_mean Sepal.Length_min Sepal.Length_max
#> <fct> <dbl> <dbl> <dbl>
#> 1 setosa 5.01 4.3 50
#> 2 versicolor 5.94 4.9 50
#> 3 virginica 6.59 4.9 50
## tapply
tapply(iris$Sepal.Length, iris$Species, summary)
#> $setosa
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 4.300 4.800 5.000 5.006 5.200 5.800
#>
#> $versicolor
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 4.900 5.600 5.900 5.936 6.300 7.000
#>
#> $virginica
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 4.900 6.225 6.500 6.588 6.900 7.900
## psych
describeBy(iris$Sepal.Length, iris$Species)
#>
#> Descriptive statistics by group
#> group: setosa
#> vars n mean sd median trimmed mad min max range skew kurtosis se
#> X1 1 50 5.01 0.35 5 5 0.3 4.3 5.8 1.5 0.11 -0.45 0.05
#> ------------------------------------------------------------
#> group: versicolor
#> vars n mean sd median trimmed mad min max range skew kurtosis se
#> X1 1 50 5.94 0.52 5.9 5.94 0.52 4.9 7 2.1 0.1 -0.69 0.07
#> ------------------------------------------------------------
#> group: virginica
#> vars n mean sd median trimmed mad min max range skew kurtosis se
#> X1 1 50 6.59 0.64 6.5 6.57 0.59 4.9 7.9 3 0.11 -0.2 0.09