package to create descriptive tables
compareGroups is an R package available on CRAN which performs descriptive tables displaying means, standard deviation, quantiles or frequencies of several variables. Also, p-value to test equality between groups is computed using the appropiate test.
With a very simple code, nice, compact and ready-to-publish descriptives table are displayed on R console. They can also be exported to different formats, such as Word, Excel, PDF or inserted in a R-Sweave or R-markdown document.
You will find an extensive manual describing all compareGropus capabilities with real examples in the vignette.
Also, compareGroups package has been published in Journal of Statistical Software [Subirana et al, 2014] (https://www.jstatsoft.org/v57/i12/).
compareGroups
is developed and maintained by Isaac Subirana,
Hector Sanz, Joan Vila and collaborators at the cardiovascular
epidemiology research unit (URLEC), located at Barcelona Biomedical
Research Park (PRBB) .
As the driving force behind the REGICOR study, URLEC has extensive experience in statistical epidemiology, and is a national reference centre for research into cardiovascular diseases and their risk factors.
Install the package from CRAN
install.packages("compareGroups")
or the lattest version from Github
library(devtools)
devtools::install_github("isubirana/compareGroups")
library(compareGroups)
data(regicor)
tab <- descrTable(year ~ . -id , regicor, hide.no = "no",
method=c(triglyc=2, tocv=2, todeath=2), sd.type = 3)
export2md(tab, header.background = "black", header.color = "white",
caption = "Summary by intervention group")
Summary by intervention group
1995
2000
2005
p.overall
N=431
N=786
N=1077
Age
54.1±11.7
54.3±11.2
55.3±10.6
0.078
Sex:
0.506
Male
206 (47.8%)
390 (49.6%)
505 (46.9%)
Female
225 (52.2%)
396 (50.4%)
572 (53.1%)
Smoking status:
<0.001
Never smoker
234 (56.4%)
414 (54.6%)
553 (52.2%)
Current or former < 1y
109 (26.3%)
267 (35.2%)
217 (20.5%)
Former >= 1y
72 (17.3%)
77 (10.2%)
290 (27.4%)
Systolic blood pressure
133±19.2
133±21.3
129±19.8
<0.001
Diastolic blood pressure
77.0±10.5
80.8±10.3
79.9±10.6
<0.001
History of hypertension
111 (25.8%)
233 (29.6%)
379 (35.5%)
<0.001
Hypertension treatment
71 (16.5%)
127 (16.2%)
230 (22.2%)
0.002
Total cholesterol
225±43.1
224±44.4
213±45.9
<0.001
HDL cholesterol
51.9±14.5
52.3±15.6
53.2±14.2
0.208
Triglycerides
94.0 \[71.0;136\]
98.0 \[72.0;133\]
98.0 \[72.0;139\]
0.762
LDL cholesterol
152±38.4
149±38.6
136±39.7
<0.001
History of hyperchol.
97 (22.5%)
256 (33.2%)
356 (33.2%)
<0.001
Cholesterol treatment
28 (6.50%)
68 (8.80%)
132 (12.8%)
<0.001
Height (cm)
163±9.21
162±9.39
163±9.05
0.003
Weight (Kg)
72.3±12.6
73.8±14.0
73.6±13.9
0.150
Body mass index
27.0±4.15
28.1±4.62
27.6±4.63
<0.001
Physical activity (Kcal/week)
491±419
422±377
351±378
<0.001
Physical component
49.3±8.08
49.0±9.63
50.1±8.91
0.032
Mental component
49.2±11.3
48.9±11.0
46.9±10.8
<0.001
Cardiovascular event
10 (2.51%)
35 (4.72%)
47 (4.59%)
0.161
Days to cardiovascular event or end of follow-up
1728 \[746;2767\]
1617 \[723;2596\]
1775 \[835;2723\]
0.096
Overall death
18 (4.65%)
81 (11.0%)
74 (7.23%)
<0.001
Days to overall death or end of follow-up
1557 \[812;2689\]
1609 \[734;2549\]
1734 \[817;2713\]
0.249
tabstrat <- strataTable(update(tab, . ~ . -sex), "sex")
export2md(tabstrat, header.background = "black", header.color = "white", size=9)
Summary descriptive tables
Male
Female
1995
2000
2005
p.overall
1995
2000
2005
p.overall
N=206
N=390
N=505
N=225
N=396
N=572
Age
54.1±11.8
54.3±11.2
55.4±10.7
0.212
54.1±11.7
54.4±11.2
55.2±10.6
0.351
Smoking status:
<0.001
<0.001
Never smoker
52 (26.5%)
112 (29.7%)
137 (27.5%)
182 (83.1%)
302 (79.3%)
416 (74.0%)
Current or former < 1y
77 (39.3%)
199 (52.8%)
134 (26.9%)
32 (14.6%)
68 (17.8%)
83 (14.8%)
Former >= 1y
67 (34.2%)
66 (17.5%)
227 (45.6%)
5 (2.28%)
11 (2.89%)
63 (11.2%)
Systolic blood pressure
134±18.4
137±19.3
132±18.7
0.002
132±19.8
129±22.6
127±20.5
0.008
Diastolic blood pressure
79.0±9.27
83.0±9.54
81.7±10.8
<0.001
75.2±11.3
78.6±10.6
78.3±10.0
<0.001
History of hypertension
50 (24.3%)
110 (28.2%)
181 (36.2%)
0.002
61 (27.1%)
123 (31.1%)
198 (34.8%)
0.097
Hypertension treatment
31 (15.0%)
48 (12.3%)
110 (22.8%)
<0.001
40 (17.8%)
79 (19.9%)
120 (21.7%)
0.446
Total cholesterol
224±43.9
224±43.9
210±40.3
<0.001
226±42.4
224±44.9
216±50.3
0.004
HDL cholesterol
46.5±13.1
47.3±12.6
48.1±12.4
0.290
56.9±13.9
57.4±16.7
57.8±14.2
0.783
Triglycerides
110 \[79.0;149\]
113 \[84.0;145\]
108 \[79.0;149\]
0.825
86.0 \[66.0;113\]
87.0 \[66.0;118\]
90.0 \[66.0;128\]
0.496
LDL cholesterol
153±39.6
152±39.1
137±36.0
<0.001
150±37.3
146±38.0
136±42.6
<0.001
History of hyperchol.
48 (23.3%)
138 (35.8%)
167 (33.2%)
0.007
49 (21.8%)
118 (30.6%)
189 (33.3%)
0.006
Cholesterol treatment
17 (8.25%)
38 (9.84%)
59 (12.2%)
0.256
11 (4.89%)
30 (7.75%)
73 (13.2%)
<0.001
Height (cm)
170±7.34
168±7.17
170±7.43
0.021
158±6.31
156±6.50
158±6.24
<0.001
Weight (Kg)
77.6±11.7
80.1±12.3
80.2±11.6
0.023
67.3±11.3
67.6±12.6
67.7±13.0
0.919
Body mass index
26.9±3.64
28.2±3.89
27.9±3.58
<0.001
27.2±4.57
28.0±5.25
27.3±5.39
0.084
Physical activity (Kcal/week)
422±418
356±362
439±467
0.014
553±412
486±382
273±253
<0.001
Physical component
50.1±6.71
50.9±8.58
51.5±8.07
0.110
48.6±9.16
47.1±10.2
48.9±9.45
0.027
Mental component
52.1±9.67
50.9±10.2
49.2±9.67
0.001
46.5±12.2
46.9±11.3
44.7±11.2
0.017
Cardiovascular event
6 (3.06%)
21 (5.74%)
19 (3.96%)
0.272
4 (1.98%)
14 (3.73%)
28 (5.15%)
0.139
Days to cardiovascular event or end of follow-up
1619 \[719;2715\]
1613 \[667;2509\]
1822 \[897;2794\]
0.043
1828 \[853;2779\]
1617 \[772;2679\]
1750 \[746;2692\]
0.427
Overall death
12 (6.45%)
46 (12.5%)
29 (6.08%)
0.002
6 (2.99%)
35 (9.43%)
45 (8.24%)
0.018
Days to overall death or end of follow-up
1557 \[836;2680\]
1606 \[751;2490\]
1688 \[785;2516\]
0.947
1587 \[786;2717\]
1620 \[730;2583\]
1809 \[867;2804\]
0.141
plot(tab["sex"])
plot(tab["age"])
data(SNPs)
tabor <- descrTable(casco ~ .-id, SNPs, show.ratio=TRUE, show.p.overall=FALSE)
export2md(tabor[1:4])
Summary descriptives table by groups of \`casco’
0
1
OR
p.ratio
N=47
N=110
sex:
Male
21 (44.7%)
54 (49.1%)
Ref.
Ref.
Female
26 (55.3%)
56 (50.9%)
0.84 \[0.42;1.67\]
0.619
blood.pre
13.1 (0.88)
12.9 (1.03)
0.78 \[0.55;1.11\]
0.174
protein
39938 (19770)
44371 (24897)
1.00 \[1.00;1.00\]
0.280
snp10001:
CC
2 (4.26%)
10 (9.09%)
Ref.
Ref.
CT
21 (44.7%)
32 (29.1%)
0.33 \[0.04;1.43\]
0.147
TT
24 (51.1%)
68 (61.8%)
0.60 \[0.08;2.55\]
0.521
library(survival)
regicor$tcv <- Surv(regicor$tocv, regicor$cv=="Yes")
tabhr <- descrTable(tcv ~ .-id-cv-tocv, regicor,
method=c(triglyc=2, tocv=2, todeath=2),
hide.no="no", ref.no="no",
show.ratio=TRUE, show.p.overall=FALSE)
export2md(tabhr[1:10], header.label=c("p.ratio"="p-value"),
caption="Descriptives by cardiovascular event")
Descriptives by cardiovascular event
No event
Event
HR
p-value
N=2071
N=92
Recruitment year:
1995
388 (18.7%)
10 (10.9%)
Ref.
Ref.
2000
706 (34.1%)
35 (38.0%)
1.95 \[0.96;3.93\]
0.063
2005
977 (47.2%)
47 (51.1%)
1.82 \[0.92;3.59\]
0.087
Age
54.6 (11.1)
57.5 (11.0)
1.02 \[1.00;1.04\]
0.021
Sex:
Male
996 (48.1%)
46 (50.0%)
Ref.
Ref.
Female
1075 (51.9%)
46 (50.0%)
0.92 \[0.61;1.39\]
0.696
Smoking status:
Never smoker
1099 (54.3%)
37 (40.2%)
Ref.
Ref.
Current or former < 1y
506 (25.0%)
47 (51.1%)
2.67 \[1.74;4.11\]
<0.001
Former >= 1y
419 (20.7%)
8 (8.70%)
0.55 \[0.26;1.18\]
0.123
Systolic blood pressure
131 (20.3)
138 (21.5)
1.02 \[1.01;1.02\]
0.001
Diastolic blood pressure
79.5 (10.4)
82.9 (12.3)
1.03 \[1.01;1.05\]
0.002
History of hypertension
647 (31.3%)
38 (41.3%)
1.52 \[1.01;2.31\]
0.047
Hypertension treatment
382 (18.7%)
22 (23.9%)
1.37 \[0.85;2.22\]
0.195
Total cholesterol
218 (44.5)
224 (50.4)
1.00 \[1.00;1.01\]
0.207
HDL cholesterol
52.8 (14.8)
50.4 (13.3)
0.99 \[0.97;1.00\]
0.114
For those not familiar to R syntax, a Web User Interface (WUI) has
been implemented using Shiny tools, which
can be used off line by typing cGroupsWUI()
after having
compareGroups
package installed and loaded, or remotely just accessing
the application hosted in a shinyapp.io
server.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.