Descriptive statistics
descript.RdCreates a data frame of descriptive statistics.
Usage
descript(
df,
vars = NULL,
groups = NULL,
funs = NULL,
drop_levels = FALSE,
digits = getOption("digits")
)
# S3 method for class 'data.frame'
descript(
df,
vars = NULL,
groups = NULL,
funs = NULL,
drop_levels = FALSE,
digits = getOption("digits")
)
# S3 method for class 'group_df'
descript(
df,
vars = NULL,
groups = NULL,
funs = NULL,
drop_levels = FALSE,
digits = getOption("digits")
)Arguments
- df
A data frame.
- vars
A character vector of variables to summarise.
- groups
A character vector of variables to group by.
- funs
Summary functions for variable types.
- drop_levels
TRUE or FALSE. If TRUE, drops unused factor levels.
- digits
An integer for the number of digits to keep for numeric variables.
Examples
#----------------------------------------------------------------------------
# descript() examples.
#----------------------------------------------------------------------------
library(bkstat)
descript(mtcars, groups = c("cyl"))
#> cyl variable N n_missing n_unique mean sd cv min
#> 1 6 mpg 7 0 6 19.7428571 1.4535670 0.07362496 17.800
#> 2 6 disp 7 0 5 183.3142857 41.5624602 0.22672788 145.000
#> 3 6 hp 7 0 4 122.2857143 24.2604911 0.19839187 105.000
#> 4 6 drat 7 0 5 3.5857143 0.4760552 0.13276440 2.760
#> 5 6 wt 7 0 6 3.1171429 0.3563455 0.11431800 2.620
#> 6 6 qsec 7 0 7 17.9771429 1.7068657 0.09494644 15.500
#> 7 6 vs 7 0 2 0.5714286 0.5345225 0.93541435 0.000
#> 8 6 am 7 0 2 0.4285714 0.5345225 1.24721913 0.000
#> 9 6 gear 7 0 3 3.8571429 0.6900656 0.17890589 3.000
#> 10 6 carb 7 0 3 3.4285714 1.8126539 0.52869073 1.000
#> 11 4 mpg 11 0 9 26.6636364 4.5098277 0.16913776 21.400
#> 12 4 disp 11 0 11 105.1363636 26.8715937 0.25558801 71.100
#> 13 4 hp 11 0 10 82.6363636 20.9345300 0.25333315 52.000
#> 14 4 drat 11 0 10 4.0709091 0.3654711 0.08977627 3.690
#> 15 4 wt 11 0 11 2.2857273 0.5695637 0.24918271 1.513
#> 16 4 qsec 11 0 11 19.1372727 1.6824452 0.08791457 16.700
#> 17 4 vs 11 0 2 0.9090909 0.3015113 0.33166248 0.000
#> 18 4 am 11 0 2 0.7272727 0.4670994 0.64226163 0.000
#> 19 4 gear 11 0 3 4.0909091 0.5393599 0.13184353 3.000
#> 20 4 carb 11 0 2 1.5454545 0.5222330 0.33791545 1.000
#> 21 8 mpg 14 0 12 15.1000000 2.5600481 0.16953961 10.400
#> 22 8 disp 14 0 11 353.1000000 67.7713236 0.19193238 275.800
#> 23 8 hp 14 0 9 209.2142857 50.9768855 0.24365872 150.000
#> 24 8 drat 14 0 11 3.2292857 0.3723618 0.11530778 2.760
#> 25 8 wt 14 0 13 3.9992143 0.7594047 0.18988849 3.170
#> 26 8 qsec 14 0 14 16.7721429 1.1960138 0.07130954 14.500
#> 27 8 vs 14 0 1 0.0000000 0.0000000 NaN 0.000
#> 28 8 am 14 0 2 0.1428571 0.3631365 2.54195564 0.000
#> 29 8 gear 14 0 2 3.2857143 0.7262730 0.22103962 3.000
#> 30 8 carb 14 0 4 3.5000000 1.5566236 0.44474959 2.000
#> p25 p50 p75 max
#> 1 18.6500 19.700 21.00000 21.400
#> 2 160.0000 167.600 196.30000 258.000
#> 3 110.0000 110.000 123.00000 175.000
#> 4 3.3500 3.900 3.91000 3.920
#> 5 2.8225 3.215 3.44000 3.460
#> 6 16.7400 18.300 19.17000 20.220
#> 7 0.0000 1.000 1.00000 1.000
#> 8 0.0000 0.000 1.00000 1.000
#> 9 3.5000 4.000 4.00000 5.000
#> 10 2.5000 4.000 4.00000 6.000
#> 11 22.8000 26.000 30.40000 33.900
#> 12 78.8500 108.000 120.65000 146.700
#> 13 65.5000 91.000 96.00000 113.000
#> 14 3.8100 4.080 4.16500 4.930
#> 15 1.8850 2.200 2.62250 3.190
#> 16 18.5600 18.900 19.95000 22.900
#> 17 1.0000 1.000 1.00000 1.000
#> 18 0.5000 1.000 1.00000 1.000
#> 19 4.0000 4.000 4.00000 5.000
#> 20 1.0000 2.000 2.00000 2.000
#> 21 14.4000 15.200 16.25000 19.200
#> 22 301.7500 350.500 390.00000 472.000
#> 23 176.2500 192.500 241.25000 335.000
#> 24 3.0700 3.115 3.22500 4.220
#> 25 3.5325 3.755 4.01375 5.424
#> 26 16.0975 17.175 17.55500 18.000
#> 27 0.0000 0.000 0.00000 0.000
#> 28 0.0000 0.000 0.00000 1.000
#> 29 3.0000 3.000 3.00000 5.000
#> 30 2.2500 3.500 4.00000 8.000
df <- bkdat::as_df(
list(
group1 = factor(c("a", "a", "a", "b", "b", "b", "c", "c", "c"), levels = c("a", "b", "c")),
group2 = factor(c("x", "y", "x", "y", "x", "y", "y", "y", "y"), levels = c("x", "y", "z")),
group3 = c("n", "m", "n", "m", "n", "m", "m", "m", "m"),
character1 = letters[1:9],
numeric1 = rnorm(9),
integer1 = sample(1:100, size = 9),
date1 = as.Date(
c("2018-12-01", "2018-12-02", "2018-12-03", "2018-12-04", "2018-12-05", "2018-12-06",
"2018-12-07", "2018-12-08", "2018-12-09")
)
)
)
groups <- c("group1", "group2")
vars <- c("character1", "numeric1", "integer1", "date1")
descript(df, vars, groups, drop_levels = TRUE)
#> group1 group2 variable N level proportion n_missing n_unique mean
#> 1 a x character1 2 <NA> NA 0 2 NA
#> 2 a x character1 1 a 0.5000000 NA NA NA
#> 3 a x character1 1 c 0.5000000 NA NA NA
#> 4 a x numeric1 2 <NA> NA 0 2 -0.05978826
#> 5 a x integer1 2 <NA> NA 0 2 49.00000000
#> 6 a x date1 2 <NA> NA 0 2 NA
#> 7 a y character1 1 <NA> NA 0 1 NA
#> 8 a y character1 1 b 1.0000000 NA NA NA
#> 9 a y numeric1 1 <NA> NA 0 1 0.07345258
#> 10 a y integer1 1 <NA> NA 0 1 50.00000000
#> 11 a y date1 1 <NA> NA 0 1 NA
#> 12 b y character1 2 <NA> NA 0 2 NA
#> 13 b y character1 1 d 0.5000000 NA NA NA
#> 14 b y character1 1 f 0.5000000 NA NA NA
#> 15 b y numeric1 2 <NA> NA 0 2 -0.47820543
#> 16 b y integer1 2 <NA> NA 0 2 35.50000000
#> 17 b y date1 2 <NA> NA 0 2 NA
#> 18 b x character1 1 <NA> NA 0 1 NA
#> 19 b x character1 1 e 1.0000000 NA NA NA
#> 20 b x numeric1 1 <NA> NA 0 1 0.50940262
#> 21 b x integer1 1 <NA> NA 0 1 11.00000000
#> 22 b x date1 1 <NA> NA 0 1 NA
#> 23 c y character1 3 <NA> NA 0 3 NA
#> 24 c y character1 1 g 0.3333333 NA NA NA
#> 25 c y character1 1 h 0.3333333 NA NA NA
#> 26 c y character1 1 i 0.3333333 NA NA NA
#> 27 c y numeric1 3 <NA> NA 0 3 -0.33606563
#> 28 c y integer1 3 <NA> NA 0 3 54.66666667
#> 29 c y date1 3 <NA> NA 0 3 NA
#> sd cv min p25 p50 p75
#> 1 NA NA NA NA NA NA
#> 2 NA NA NA NA NA NA
#> 3 NA NA NA NA NA NA
#> 4 0.8915421 -14.9116588 -0.69020376 -0.37499601 -0.05978826 0.25541949
#> 5 24.0416306 0.4906455 32.00000000 40.50000000 49.00000000 57.50000000
#> 6 NA NA NA NA NA NA
#> 7 NA NA NA NA NA NA
#> 8 NA NA NA NA NA NA
#> 9 NA NA 0.07345258 0.07345258 0.07345258 0.07345258
#> 10 NA NA 50.00000000 50.00000000 50.00000000 50.00000000
#> 11 NA NA NA NA NA NA
#> 12 NA NA NA NA NA NA
#> 13 NA NA NA NA NA NA
#> 14 NA NA NA NA NA NA
#> 15 0.3172600 -0.6634388 -0.70254216 -0.59037380 -0.47820543 -0.36603706
#> 16 2.1213203 0.0597555 34.00000000 34.75000000 35.50000000 36.25000000
#> 17 NA NA NA NA NA NA
#> 18 NA NA NA NA NA NA
#> 19 NA NA NA NA NA NA
#> 20 NA NA 0.50940262 0.50940262 0.50940262 0.50940262
#> 21 NA NA 11.00000000 11.00000000 11.00000000 11.00000000
#> 22 NA NA NA NA NA NA
#> 23 NA NA NA NA NA NA
#> 24 NA NA NA NA NA NA
#> 25 NA NA NA NA NA NA
#> 26 NA NA NA NA NA NA
#> 27 0.8083226 -2.4052521 -1.26685261 -0.59881276 0.06922708 0.12932786
#> 28 24.8260616 0.4541353 27.00000000 44.50000000 62.00000000 68.50000000
#> 29 NA NA NA NA NA NA
#> max min_date p25_date p50_date p75_date max_date
#> 1 NA <NA> <NA> <NA> <NA> <NA>
#> 2 NA <NA> <NA> <NA> <NA> <NA>
#> 3 NA <NA> <NA> <NA> <NA> <NA>
#> 4 0.57062724 <NA> <NA> <NA> <NA> <NA>
#> 5 66.00000000 <NA> <NA> <NA> <NA> <NA>
#> 6 NA 2018-12-01 2018-12-01 2018-12-02 2018-12-03 2018-12-03
#> 7 NA <NA> <NA> <NA> <NA> <NA>
#> 8 NA <NA> <NA> <NA> <NA> <NA>
#> 9 0.07345258 <NA> <NA> <NA> <NA> <NA>
#> 10 50.00000000 <NA> <NA> <NA> <NA> <NA>
#> 11 NA 2018-12-02 2018-12-02 2018-12-02 2018-12-02 2018-12-02
#> 12 NA <NA> <NA> <NA> <NA> <NA>
#> 13 NA <NA> <NA> <NA> <NA> <NA>
#> 14 NA <NA> <NA> <NA> <NA> <NA>
#> 15 -0.25386870 <NA> <NA> <NA> <NA> <NA>
#> 16 37.00000000 <NA> <NA> <NA> <NA> <NA>
#> 17 NA 2018-12-04 2018-12-04 2018-12-05 2018-12-06 2018-12-06
#> 18 NA <NA> <NA> <NA> <NA> <NA>
#> 19 NA <NA> <NA> <NA> <NA> <NA>
#> 20 0.50940262 <NA> <NA> <NA> <NA> <NA>
#> 21 11.00000000 <NA> <NA> <NA> <NA> <NA>
#> 22 NA 2018-12-05 2018-12-05 2018-12-05 2018-12-05 2018-12-05
#> 23 NA <NA> <NA> <NA> <NA> <NA>
#> 24 NA <NA> <NA> <NA> <NA> <NA>
#> 25 NA <NA> <NA> <NA> <NA> <NA>
#> 26 NA <NA> <NA> <NA> <NA> <NA>
#> 27 0.18942863 <NA> <NA> <NA> <NA> <NA>
#> 28 75.00000000 <NA> <NA> <NA> <NA> <NA>
#> 29 NA 2018-12-07 2018-12-07 2018-12-08 2018-12-09 2018-12-09