You can make tables summarizing descriptive statistics easily with webr package.
You have to install the latest versions of “webr” and “moonBook” packages from github.
You can summmarize the frequencies easily with freqSummary() function. Also you can make a table summarizng frequencies with freqTable() function.
Count Percent Valid Percent Cum Percent
NSTEMI "153" "17.9" "17.9" "17.9"
STEMI "304" "35.5" "35.5" "53.3"
Unstable Angina "400" "46.7" "46.7" "100.0"
Sum "857" "100.0" "100.0" ""
rowname | Count | Percent | Valid Percent | Cum Percent |
NSTEMI | 153 | 17.9 | 17.9 | 17.9 |
STEMI | 304 | 35.5 | 35.5 | 53.3 |
Unstable Angina | 400 | 46.7 | 46.7 | 100.0 |
Sum | 857 | 100.0 | 100.0 |
The freqTable() function returns an object of class “flextable”. With this object, you can make html, pdf, docx, pptx file easily.
[1] "flextable"
You can make the frequency table for a continuous variable. In this time, you can get a long table.
rowname | Count | Percent | Valid Percent | Cum Percent |
10.4 | 2 | 6.2 | 6.2 | 6.2 |
13.3 | 1 | 3.1 | 3.1 | 9.4 |
14.3 | 1 | 3.1 | 3.1 | 12.5 |
14.7 | 1 | 3.1 | 3.1 | 15.6 |
15 | 1 | 3.1 | 3.1 | 18.8 |
15.2 | 2 | 6.2 | 6.2 | 25.0 |
15.5 | 1 | 3.1 | 3.1 | 28.1 |
15.8 | 1 | 3.1 | 3.1 | 31.2 |
16.4 | 1 | 3.1 | 3.1 | 34.4 |
17.3 | 1 | 3.1 | 3.1 | 37.5 |
17.8 | 1 | 3.1 | 3.1 | 40.6 |
18.1 | 1 | 3.1 | 3.1 | 43.8 |
18.7 | 1 | 3.1 | 3.1 | 46.9 |
19.2 | 2 | 6.2 | 6.2 | 53.1 |
19.7 | 1 | 3.1 | 3.1 | 56.2 |
21 | 2 | 6.2 | 6.2 | 62.5 |
21.4 | 2 | 6.2 | 6.2 | 68.8 |
21.5 | 1 | 3.1 | 3.1 | 71.9 |
22.8 | 2 | 6.2 | 6.2 | 78.1 |
24.4 | 1 | 3.1 | 3.1 | 81.2 |
26 | 1 | 3.1 | 3.1 | 84.4 |
27.3 | 1 | 3.1 | 3.1 | 87.5 |
30.4 | 2 | 6.2 | 6.2 | 93.8 |
32.4 | 1 | 3.1 | 3.1 | 96.9 |
33.9 | 1 | 3.1 | 3.1 | 100.0 |
Sum | 32 | 100.0 | 100.0 |
You can make a table summarizing the independency of two categorical variables.
rowname | Female | Male | Total |
NSTEMI | 50 | 103 | 153 |
STEMI | 84 | 220 | 304 |
Unstable Angina | 153 | 247 | 400 |
Total | 287 | 570 | 857 |
Chi-squared=8.798, df=2, Cramer's V=0.101, Chi-squared p=0.0123 |
You can make a table with columnwise percentages.
rowname | Female | Male | Total |
NSTEMI | 50 | 103 | 153 |
STEMI | 84 | 220 | 304 |
Unstable Angina | 153 | 247 | 400 |
Total | 287 | 570 | 857 |
Chi-squared=8.798, df=2, Cramer's V=0.101, Chi-squared p=0.0123 |
You can hide pecentages.
rowname | Female | Male | Total |
NSTEMI | 50 | 103 | 153 |
STEMI | 84 | 220 | 304 |
Unstable Angina | 153 | 247 | 400 |
Total | 287 | 570 | 857 |
Chi-squared=8.798, df=2, Cramer's V=0.101, Chi-squared p=0.0123 |
You can make a numerical summary table with numSummary() function. If you use the numSummary() function to a continuous vector, you can get the following summary. This function uses psych::describe function
# A tibble: 1 x 12
n mean sd median trimmed mad min max range skew kurtosis se
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 857 63.3 11.7 64 63.6 13.3 28 91 63 -0.175 -0.566 0.400
n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se |
857.00 | 63.31 | 11.70 | 64.00 | 63.56 | 13.34 | 28.00 | 91.00 | 63.00 | -0.18 | -0.57 | 0.40 |
You can make a numerical summary of a data.frame. The numSummary function uses is.numeric function to select numeric columns and make a numeric summary.
# A tibble: 9 x 13
vars n mean sd median trimmed mad min max range skew kurtosis
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 age 857 63.3 11.7 64 63.6 13.3 28 91 63 -0.175 -0.566
2 EF 723 55.8 9.62 58.1 56.8 7.86 18 79 61 -0.978 1.11
3 heig… 764 163. 9.08 165 164. 7.41 130 185 55 -0.440 -0.0145
4 weig… 766 64.8 11.4 65 64.5 10.4 30 112 82 0.336 0.444
5 BMI 764 24.3 3.35 24.2 24.2 3.01 15.6 41.4 25.8 0.668 2.12
6 TC 834 185. 47.8 183 184. 43.0 25 493 468 0.737 3.77
7 LDLC 833 117. 41.1 114 115. 40.0 15 366 351 0.787 2.33
8 HDLC 834 38.2 11.1 38 38.0 10.4 4 89 85 0.366 1.46
9 TG 842 125. 90.9 106. 111. 60.0 11 877 866 3.02 14.9
# … with 1 more variable: se <dbl>
rowname | vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se |
1 | age | 857.00 | 63.31 | 11.70 | 64.00 | 63.56 | 13.34 | 28.00 | 91.00 | 63.00 | -0.18 | -0.57 | 0.40 |
2 | EF | 723.00 | 55.83 | 9.62 | 58.10 | 56.77 | 7.86 | 18.00 | 79.00 | 61.00 | -0.98 | 1.11 | 0.36 |
3 | height | 764.00 | 163.18 | 9.08 | 165.00 | 163.52 | 7.41 | 130.00 | 185.00 | 55.00 | -0.44 | -0.01 | 0.33 |
4 | weight | 766.00 | 64.84 | 11.36 | 65.00 | 64.55 | 10.38 | 30.00 | 112.00 | 82.00 | 0.34 | 0.44 | 0.41 |
5 | BMI | 764.00 | 24.28 | 3.35 | 24.16 | 24.16 | 3.01 | 15.62 | 41.42 | 25.80 | 0.67 | 2.12 | 0.12 |
6 | TC | 834.00 | 185.20 | 47.77 | 183.00 | 183.76 | 43.00 | 25.00 | 493.00 | 468.00 | 0.74 | 3.77 | 1.65 |
7 | LDLC | 833.00 | 116.58 | 41.09 | 114.00 | 114.62 | 40.03 | 15.00 | 366.00 | 351.00 | 0.79 | 2.33 | 1.42 |
8 | HDLC | 834.00 | 38.24 | 11.09 | 38.00 | 37.95 | 10.38 | 4.00 | 89.00 | 85.00 | 0.37 | 1.46 | 0.38 |
9 | TG | 842.00 | 125.24 | 90.85 | 105.50 | 111.29 | 60.05 | 11.00 | 877.00 | 866.00 | 3.02 | 14.91 | 3.13 |
You can use dplyr::select() function to select variables to summarize.
# A tibble: 2 x 13
vars n mean sd median trimmed mad min max range skew kurtosis
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 age 857 63.3 11.7 64 63.6 13.3 28 91 63 -0.175 -0.566
2 EF 723 55.8 9.62 58.1 56.8 7.86 18 79 61 -0.978 1.11
# … with 1 more variable: se <dbl>
rowname | vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se |
1 | age | 857.00 | 63.31 | 11.70 | 64.00 | 63.56 | 13.34 | 28.00 | 91.00 | 63.00 | -0.18 | -0.57 | 0.40 |
2 | EF | 723.00 | 55.83 | 9.62 | 58.10 | 56.77 | 7.86 | 18.00 | 79.00 | 61.00 | -0.98 | 1.11 | 0.36 |
You can use dplyr::group_by() and dplyr::select() function to select variables to summarize by group.
# A tibble: 4 x 14
# Groups: sex [2]
sex vars n mean sd median trimmed mad min max range skew
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Male age 570 60.6 11.2 61 60.6 11.9 28 91 63 -0.0148
2 Male EF 483 55.6 9.40 57.3 56.4 8.01 18 79 61 -0.789
3 Fema… age 287 68.7 10.7 70 69.4 10.4 39 90 51 -0.593
4 Fema… EF 240 56.3 10.1 59.2 57.6 7.19 18.4 75 56.6 -1.30
# … with 2 more variables: kurtosis <dbl>, se <dbl>
sex | vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se |
Male | age | 570.00 | 60.61 | 11.23 | 61.00 | 60.65 | 11.86 | 28.00 | 91.00 | 63.00 | -0.01 | -0.36 | 0.47 |
Male | EF | 483.00 | 55.62 | 9.40 | 57.30 | 56.38 | 8.01 | 18.00 | 79.00 | 61.00 | -0.79 | 0.76 | 0.43 |
Female | age | 287.00 | 68.68 | 10.73 | 70.00 | 69.43 | 10.38 | 39.00 | 90.00 | 51.00 | -0.59 | -0.26 | 0.63 |
Female | EF | 240.00 | 56.27 | 10.06 | 59.25 | 57.57 | 7.19 | 18.40 | 75.00 | 56.60 | -1.30 | 1.70 | 0.65 |
You can summarize by multiple groups.
# A tibble: 12 x 15
# Groups: sex, Dx [6]
sex Dx vars n mean sd median trimmed mad min max range
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Male STEMI age 220 59.4 11.7 59.5 59.4 11.1 30 86 56
2 Male STEMI EF 195 52.4 8.90 54 52.9 8.45 18 73.6 55.6
3 Fema… STEMI age 84 69.1 10.4 70 70.0 10.4 42 89 47
4 Fema… STEMI EF 77 52.3 10.9 55.7 53.7 9.04 18.4 67.1 48.7
5 Male NSTE… age 103 61.1 11.6 59 61.3 13.3 28 85 57
6 Male NSTE… EF 94 55.1 9.42 58 55.9 7.12 21.8 74 52.2
7 Fema… Unst… age 153 67.7 10.7 70 68.3 8.90 39 90 51
8 Fema… Unst… EF 118 59.4 8.76 61.1 60.8 5.49 22 71.9 49.9
9 Male Unst… age 247 61.4 10.6 61 61.4 10.4 35 91 56
10 Male Unst… EF 194 59.1 8.67 60 60.2 5.93 24.7 79 54.3
11 Fema… NSTE… age 50 70.9 11.4 74.5 71.9 8.90 42 88 46
12 Fema… NSTE… EF 45 54.8 9.10 57 55.3 9.79 36.8 75 38.2
# … with 3 more variables: skew <dbl>, kurtosis <dbl>, se <dbl>
sex | Dx | vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se |
Male | STEMI | age | 220.00 | 59.43 | 11.72 | 59.50 | 59.43 | 11.12 | 30.00 | 86.00 | 56.00 | 0.00 | -0.55 | 0.79 |
Male | STEMI | EF | 195.00 | 52.37 | 8.90 | 54.00 | 52.88 | 8.45 | 18.00 | 73.60 | 55.60 | -0.62 | 0.53 | 0.64 |
Female | STEMI | age | 84.00 | 69.11 | 10.36 | 70.00 | 70.04 | 10.38 | 42.00 | 89.00 | 47.00 | -0.65 | -0.09 | 1.13 |
Female | STEMI | EF | 77.00 | 52.32 | 10.94 | 55.70 | 53.72 | 9.04 | 18.40 | 67.10 | 48.70 | -1.17 | 1.01 | 1.25 |
Male | NSTEMI | age | 103.00 | 61.15 | 11.57 | 59.00 | 61.28 | 13.34 | 28.00 | 85.00 | 57.00 | -0.11 | -0.53 | 1.14 |
Male | NSTEMI | EF | 94.00 | 55.08 | 9.42 | 58.00 | 55.86 | 7.12 | 21.80 | 74.00 | 52.20 | -0.83 | 0.57 | 0.97 |
Female | Unstable Angina | age | 153.00 | 67.72 | 10.67 | 70.00 | 68.33 | 8.90 | 39.00 | 90.00 | 51.00 | -0.54 | -0.34 | 0.86 |
Female | Unstable Angina | EF | 118.00 | 59.40 | 8.76 | 61.10 | 60.79 | 5.49 | 22.00 | 71.90 | 49.90 | -1.86 | 4.06 | 0.81 |
Male | Unstable Angina | age | 247.00 | 61.44 | 10.57 | 61.00 | 61.41 | 10.38 | 35.00 | 91.00 | 56.00 | 0.07 | -0.15 | 0.67 |
Male | Unstable Angina | EF | 194.00 | 59.14 | 8.67 | 60.00 | 60.15 | 5.93 | 24.70 | 79.00 | 54.30 | -1.25 | 2.54 | 0.62 |
Female | NSTEMI | age | 50.00 | 70.88 | 11.35 | 74.50 | 71.88 | 8.90 | 42.00 | 88.00 | 46.00 | -0.72 | -0.34 | 1.61 |
Female | NSTEMI | EF | 45.00 | 54.85 | 9.10 | 57.00 | 55.26 | 9.79 | 36.80 | 75.00 | 38.20 | -0.32 | -0.83 | 1.36 |
You can use package rrtable
for reproducible research.
require(rrtable)
type=c("table","table")
title=c("Frequency Table","Numerical Summary")
code=c("freqTable(acs$Dx)","acs %>% group_by(sex) %>% select(EF,age) %>% numSummaryTable")
data=data.frame(type,title,code,stringsAsFactors = FALSE)
data2pptx(data)
[1] "/var/folders/ft/_w6lflrs4mz4f8n_r5w_h7vh0000gn/T/Rtmp5bd86I/Report.pptx"
[1] "/var/folders/ft/_w6lflrs4mz4f8n_r5w_h7vh0000gn/T/Rtmp5bd86I/Report.docx"