TableOne R Package Examples

Author

Win Khaing

Setup

pacman::p_load(tableone, survival, flextable, officer, htmltools, htmlTable)

Load Data

Using Mayo Clinic’s Primary Biliary Cholangitis (PBC) data from the survival package.

data(pbc)

# Drop ID from variable list
vars <- names(pbc)[-1]
vars
 [1] "time"     "status"   "trt"      "age"      "sex"      "ascites" 
 [7] "hepato"   "spiders"  "edema"    "bili"     "chol"     "albumin" 
[13] "copper"   "alk.phos" "ast"      "trig"     "platelet" "protime" 
[19] "stage"   
str(pbc)
'data.frame':   418 obs. of  20 variables:
 $ id      : int  1 2 3 4 5 6 7 8 9 10 ...
 $ time    : int  400 4500 1012 1925 1504 2503 1832 2466 2400 51 ...
 $ status  : int  2 0 2 2 1 2 0 2 2 2 ...
 $ trt     : int  1 1 1 1 2 2 2 2 1 2 ...
 $ age     : num  58.8 56.4 70.1 54.7 38.1 ...
 $ sex     : Factor w/ 2 levels "m","f": 2 2 1 2 2 2 2 2 2 2 ...
 $ ascites : int  1 0 0 0 0 0 0 0 0 1 ...
 $ hepato  : int  1 1 0 1 1 1 1 0 0 0 ...
 $ spiders : int  1 1 0 1 1 0 0 0 1 1 ...
 $ edema   : num  1 0 0.5 0.5 0 0 0 0 0 1 ...
 $ bili    : num  14.5 1.1 1.4 1.8 3.4 0.8 1 0.3 3.2 12.6 ...
 $ chol    : int  261 302 176 244 279 248 322 280 562 200 ...
 $ albumin : num  2.6 4.14 3.48 2.54 3.53 3.98 4.09 4 3.08 2.74 ...
 $ copper  : int  156 54 210 64 143 50 52 52 79 140 ...
 $ alk.phos: num  1718 7395 516 6122 671 ...
 $ ast     : num  137.9 113.5 96.1 60.6 113.2 ...
 $ trig    : int  172 88 55 92 72 63 213 189 88 143 ...
 $ platelet: int  190 221 151 183 136 NA 204 373 251 302 ...
 $ protime : num  12.2 10.6 12 10.3 10.9 11 9.7 11 11 11.5 ...
 $ stage   : int  4 3 4 4 3 3 3 3 2 4 ...

Create Table 1

Create Table 1 stratified by treatment group (trt).

tableOne <- CreateTableOne(
    vars = vars,
    strata = c("trt"),
    data = pbc,
    factorVars = c("status", "edema", "stage")
)

Save as Data Frame

table1df <- as.data.frame(print(tableOne,
    nonnormal = c("bili", "chol", "copper", "alk.phos", "trig"),
    exact = c("status", "stage"),
    smd = TRUE,
    formatOptions = list(big.mark = ","),
    printToggle = FALSE
))

table1df
                                                  1                           2
n                                               158                         154
time..mean..SD..                2,015.62 (1,094.12)         1,996.86 (1,155.93)
status....                                                                     
X...0                                    83 (52.5)                   85 (55.2) 
X...1                                    10 ( 6.3)                    9 ( 5.8) 
X...2                                    65 (41.1)                   60 (39.0) 
trt..mean..SD..                         1.00 (0.00)                 2.00 (0.00)
age..mean..SD..                       51.42 (11.01)                48.58 (9.96)
sex...f....                             137 (86.7)                  139 (90.3) 
ascites..mean..SD..                     0.09 (0.29)                 0.06 (0.25)
hepato..mean..SD..                      0.46 (0.50)                 0.56 (0.50)
spiders..mean..SD..                     0.28 (0.45)                 0.29 (0.46)
edema....                                                                      
X...0.1                                 132 (83.5)                  131 (85.1) 
X...0.5                                  16 (10.1)                   13 ( 8.4) 
X...1.1                                  10 ( 6.3)                   10 ( 6.5) 
bili..median..IQR..               1.40 [0.80, 3.20]           1.30 [0.72, 3.60]
chol..median..IQR..         315.50 [247.75, 417.00]     303.50 [254.25, 377.00]
albumin..mean..SD..                     3.52 (0.44)                 3.52 (0.40)
copper..median..IQR..         73.00 [40.00, 121.00]       73.00 [43.00, 139.00]
alk.phos..median..IQR.. 1,214.50 [840.75, 2,028.00] 1,283.00 [922.50, 1,949.75]
ast..mean..SD..                      120.21 (54.52)              124.97 (58.93)
trig..median..IQR..          106.00 [84.50, 146.00]      113.00 [84.50, 155.00]
platelet..mean..SD..                258.75 (100.32)              265.20 (90.73)
protime..mean..SD..                    10.65 (0.85)                10.80 (1.14)
stage....                                                                      
X...1.2                                  12 ( 7.6)                    4 ( 2.6) 
X...2.1                                  35 (22.2)                   32 (20.8) 
X...3                                    56 (35.4)                   64 (41.6) 
X...4                                    55 (34.8)                   54 (35.1) 
                             p    test    SMD
n                                            
time..mean..SD..         0.883          0.017
status....               0.884   exact  0.054
X...0                                        
X...1                                        
X...2                                        
trt..mean..SD..         <0.001            Inf
age..mean..SD..          0.018          0.270
sex...f....              0.421          0.111
ascites..mean..SD..      0.434          0.089
hepato..mean..SD..       0.069          0.206
spiders..mean..SD..      0.886          0.016
edema....                0.877          0.058
X...0.1                                      
X...0.5                                      
X...1.1                                      
bili..median..IQR..      0.842 nonnorm  0.171
chol..median..IQR..      0.544 nonnorm  0.038
albumin..mean..SD..      0.874          0.018
copper..median..IQR..    0.717 nonnorm <0.001
alk.phos..median..IQR..  0.812 nonnorm  0.037
ast..mean..SD..          0.460          0.084
trig..median..IQR..      0.370 nonnorm  0.017
platelet..mean..SD..     0.555          0.067
protime..mean..SD..      0.197          0.146
stage....                0.205   exact  0.246
X...1.2                                      
X...2.1                                      
X...3                                        
X...4                                        

Export Options

Save as CSV

write.csv(table1df, file = "table1.csv", row.names = FALSE)

Save as Word Document

table1ft <- flextable(table1df)
doc <- read_docx()
doc <- body_add_flextable(doc, value = table1ft)
print(doc, target = "table1.docx")

Save as HTML File

table1html <- htmlTable::htmlTable(table1df)
save_html(table1html, file = "table1.html")
# view save_html
browseURL("table1.html")