R海拾遗-table1绘制

时间:2022-07-25
本文章向大家介绍R海拾遗-table1绘制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

table 1

sunqi

2020/6/11

希望有一天有人也能翻翻我写的小说和文章,
悄地找找藏匿其中的痛苦与可恶

概述

文章table 1 的自动化生成

install

if(FALSE){# 如果未安装改为true
  install.packages("tableone")
}
library(survival)
data(pbc)## get the data

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Single group summary

# 单组总结
library(tableone)

CreateTableOne(data = pbc)
##
##                        Overall
##   n                        418
##   id (mean (SD))        209.50 (120.81)
##   time (mean (SD))     1917.78 (1104.67)
##   status (mean (SD))      0.83 (0.96)
##   trt (mean (SD))         1.49 (0.50)
##   age (mean (SD))        50.74 (10.45)
##   sex = f (%)              374 (89.5)
##   ascites (mean (SD))     0.08 (0.27)
##   hepato (mean (SD))      0.51 (0.50)
##   spiders (mean (SD))     0.29 (0.45)
##   edema (mean (SD))       0.10 (0.25)
##   bili (mean (SD))        3.22 (4.41)
##   chol (mean (SD))      369.51 (231.94)
##   albumin (mean (SD))     3.50 (0.42)
##   copper (mean (SD))     97.65 (85.61)
##   alk.phos (mean (SD)) 1982.66 (2140.39)
##   ast (mean (SD))       122.56 (56.70)
##   trig (mean (SD))      124.70 (65.15)
##   platelet (mean (SD))  257.02 (98.33)
##   protime (mean (SD))    10.73 (1.02)
##   stage (mean (SD))       3.02 (0.88)

分类变量处理

一般情况下我们的分类变量是预先设置

## Get variables names
dput(names(pbc))
## c("id", "time", "status", "trt", "age", "sex", "ascites", "hepato",
## "spiders", "edema", "bili", "chol", "albumin", "copper", "alk.phos",
## "ast", "trig", "platelet", "protime", "stage")
## 指定变量
myVars <- c("time", "status", "trt", "age", "sex", "ascites", "hepato",
          "spiders", "edema", "bili", "chol", "albumin", "copper", "alk.phos",
          "ast", "trig", "platelet", "protime", "stage")
## 指定分类变量
catVars <- c("status", "trt", "ascites", "hepato",
             "spiders", "edema", "stage")
## 建立table1
tab2 <- CreateTableOne(vars = myVars, data = pbc, factorVars = catVars)
tab2
##
##                        Overall
##   n                        418
##   time (mean (SD))     1917.78 (1104.67)
##   status (%)
##      0                     232 (55.5)
##      1                      25 ( 6.0)
##      2                     161 (38.5)
##   trt = 2 (%)              154 (49.4)
##   age (mean (SD))        50.74 (10.45)
##   sex = f (%)              374 (89.5)
##   ascites = 1 (%)           24 ( 7.7)
##   hepato = 1 (%)           160 (51.3)
##   spiders = 1 (%)           90 (28.8)
##   edema (%)
##      0                     354 (84.7)
##      0.5                    44 (10.5)
##      1                      20 ( 4.8)
##   bili (mean (SD))        3.22 (4.41)
##   chol (mean (SD))      369.51 (231.94)
##   albumin (mean (SD))     3.50 (0.42)
##   copper (mean (SD))     97.65 (85.61)
##   alk.phos (mean (SD)) 1982.66 (2140.39)
##   ast (mean (SD))       122.56 (56.70)
##   trig (mean (SD))      124.70 (65.15)
##   platelet (mean (SD))  257.02 (98.33)
##   protime (mean (SD))    10.73 (1.02)
##   stage (%)
##      1                      21 ( 5.1)
##      2                      92 (22.3)
##      3                     155 (37.6)
##      4                     144 (35.0)
## 同时分类变量中可能存在缺失
## 可以使用showAllLevels参数设置显示
print(tab2, showAllLevels = TRUE)
##
##                        level Overall
##   n                              418
##   time (mean (SD))           1917.78 (1104.67)
##   status (%)           0         232 (55.5)
##                        1          25 ( 6.0)
##                        2         161 (38.5)
##   trt (%)              1         158 (50.6)
##                        2         154 (49.4)
##   age (mean (SD))              50.74 (10.45)
##   sex (%)              m          44 (10.5)
##                        f         374 (89.5)
##   ascites (%)          0         288 (92.3)
##                        1          24 ( 7.7)
##   hepato (%)           0         152 (48.7)
##                        1         160 (51.3)
##   spiders (%)          0         222 (71.2)
##                        1          90 (28.8)
##   edema (%)            0         354 (84.7)
##                        0.5        44 (10.5)
##                        1          20 ( 4.8)
##   bili (mean (SD))              3.22 (4.41)
##   chol (mean (SD))            369.51 (231.94)
##   albumin (mean (SD))           3.50 (0.42)
##   copper (mean (SD))           97.65 (85.61)
##   alk.phos (mean (SD))       1982.66 (2140.39)
##   ast (mean (SD))             122.56 (56.70)
##   trig (mean (SD))            124.70 (65.15)
##   platelet (mean (SD))        257.02 (98.33)
##   protime (mean (SD))          10.73 (1.02)
##   stage (%)            1          21 ( 5.1)
##                        2          92 (22.3)
##                        3         155 (37.6)
##                        4         144 (35.0)

使用summary显示变量的详细信息

summary(tab2)
##
##      ### Summary of continuous variables ###
##
## strata: Overall
##            n miss p.miss mean    sd median   p25  p75   min   max  skew kurt
## time     418    0    0.0 1918 1e+03   1730 1e+03 2614  41.0  4795  0.47 -0.5
## age      418    0    0.0   51 1e+01     51 4e+01   58  26.3    78  0.09 -0.6
## bili     418    0    0.0    3 4e+00      1 8e-01    3   0.3    28  2.72  8.1
## chol     418  134   32.1  370 2e+02    310 2e+02  400 120.0  1775  3.41 14.3
## albumin  418    0    0.0    3 4e-01      4 3e+00    4   2.0     5 -0.47  0.6
## copper   418  108   25.8   98 9e+01     73 4e+01  123   4.0   588  2.30  7.6
## alk.phos 418  106   25.4 1983 2e+03   1259 9e+02 1980 289.0 13862  2.99  9.7
## ast      418  106   25.4  123 6e+01    115 8e+01  152  26.4   457  1.45  4.3
## trig     418  136   32.5  125 7e+01    108 8e+01  151  33.0   598  2.52 11.8
## platelet 418   11    2.6  257 1e+02    251 2e+02  318  62.0   721  0.63  0.9
## protime  418    2    0.5   11 1e+00     11 1e+01   11   9.0    18  2.22 10.0
##
## =======================================================================================
##
##      ### Summary of categorical variables ###
##
## strata: Overall
##      var   n miss p.miss level freq percent cum.percent
##   status 418    0    0.0     0  232    55.5        55.5
##                              1   25     6.0        61.5
##                              2  161    38.5       100.0
##
##      trt 418  106   25.4     1  158    50.6        50.6
##                              2  154    49.4       100.0
##
##      sex 418    0    0.0     m   44    10.5        10.5
##                              f  374    89.5       100.0
##
##  ascites 418  106   25.4     0  288    92.3        92.3
##                              1   24     7.7       100.0
##
##   hepato 418  106   25.4     0  152    48.7        48.7
##                              1  160    51.3       100.0
##
##  spiders 418  106   25.4     0  222    71.2        71.2
##                              1   90    28.8       100.0
##
##    edema 418    0    0.0     0  354    84.7        84.7
##                            0.5   44    10.5        95.2
##                              1   20     4.8       100.0
##
##    stage 418    6    1.4     1   21     5.1         5.1
##                              2   92    22.3        27.4
##                              3  155    37.6        65.0
##                              4  144    35.0       100.0
##

非正态连续变量

# 指定非正态变量
biomarkers <- c("bili","chol","copper","alk.phos","ast","trig","protime")
print(tab2, nonnormal = biomarkers)
##
##                           Overall
##   n                           418
##   time (mean (SD))        1917.78 (1104.67)
##   status (%)
##      0                        232 (55.5)
##      1                         25 ( 6.0)
##      2                        161 (38.5)
##   trt = 2 (%)                 154 (49.4)
##   age (mean (SD))           50.74 (10.45)
##   sex = f (%)                 374 (89.5)
##   ascites = 1 (%)              24 ( 7.7)
##   hepato = 1 (%)              160 (51.3)
##   spiders = 1 (%)              90 (28.8)
##   edema (%)
##      0                        354 (84.7)
##      0.5                       44 (10.5)
##      1                         20 ( 4.8)
##   bili (median [IQR])        1.40 [0.80, 3.40]
##   chol (median [IQR])      309.50 [249.50, 400.00]
##   albumin (mean (SD))        3.50 (0.42)
##   copper (median [IQR])     73.00 [41.25, 123.00]
##   alk.phos (median [IQR]) 1259.00 [871.50, 1980.00]
##   ast (median [IQR])       114.70 [80.60, 151.90]
##   trig (median [IQR])      108.00 [84.25, 151.00]
##   platelet (mean (SD))     257.02 (98.33)
##   protime (median [IQR])    10.60 [10.00, 11.10]
##   stage (%)
##      1                         21 ( 5.1)
##      2                         92 (22.3)
##      3                        155 (37.6)
##      4                        144 (35.0)
# 最终显示四分位数和中位数

两组描述

# strata参数设置分组
tab3 <- CreateTableOne(vars = myVars, strata = "trt" , data = pbc, factorVars = catVars)
tab3
##                       Stratified by trt
##                        1                 2                 p      test
##   n                        158               154
##   time (mean (SD))     2015.62 (1094.12) 1996.86 (1155.93)  0.883
##   status (%)                                                0.894
##      0                      83 (52.5)         85 ( 55.2)
##      1                      10 ( 6.3)          9 (  5.8)
##      2                      65 (41.1)         60 ( 39.0)
##   trt = 2 (%)                0 ( 0.0)        154 (100.0)   <0.001
##   age (mean (SD))        51.42 (11.01)     48.58 (9.96)     0.018
##   sex = f (%)              137 (86.7)        139 ( 90.3)    0.421
##   ascites = 1 (%)           14 ( 8.9)         10 (  6.5)    0.567
##   hepato = 1 (%)            73 (46.2)         87 ( 56.5)    0.088
##   spiders = 1 (%)           45 (28.5)         45 ( 29.2)    0.985
##   edema (%)                                                 0.877
##      0                     132 (83.5)        131 ( 85.1)
##      0.5                    16 (10.1)         13 (  8.4)
##      1                      10 ( 6.3)         10 (  6.5)
##   bili (mean (SD))        2.87 (3.63)       3.65 (5.28)     0.131
##   chol (mean (SD))      365.01 (209.54)   373.88 (252.48)   0.748
##   albumin (mean (SD))     3.52 (0.44)       3.52 (0.40)     0.874
##   copper (mean (SD))     97.64 (90.59)     97.65 (80.49)    0.999
##   alk.phos (mean (SD)) 2021.30 (2183.44) 1943.01 (2101.69)  0.747
##   ast (mean (SD))       120.21 (54.52)    124.97 (58.93)    0.460
##   trig (mean (SD))      124.14 (71.54)    125.25 (58.52)    0.886
##   platelet (mean (SD))  258.75 (100.32)   265.20 (90.73)    0.555
##   protime (mean (SD))    10.65 (0.85)      10.80 (1.14)     0.197
##   stage (%)                                                 0.201
##      1                      12 ( 7.6)          4 (  2.6)
##      2                      35 (22.2)         32 ( 20.8)
##      3                      56 (35.4)         64 ( 41.6)
##      4                      55 (34.8)         54 ( 35.1)
# 最终显示分组信息并添加p值
# 当然如果不符合正态那么就需要选择其他的统计方法
# 使用nonnormal 参数指定非正态,使用kruskal.test,两组为wilcox.test
# exact 参数指定确切概率法fisher的分类比较

print(tab3, nonnormal = biomarkers, exact = "stage")
##                          Stratified by trt
##                           1                         2
##   n                           158                       154
##   time (mean (SD))        2015.62 (1094.12)         1996.86 (1155.93)
##   status (%)
##      0                         83 (52.5)                 85 ( 55.2)
##      1                         10 ( 6.3)                  9 (  5.8)
##      2                         65 (41.1)                 60 ( 39.0)
##   trt = 2 (%)                   0 ( 0.0)                154 (100.0)
##   age (mean (SD))           51.42 (11.01)             48.58 (9.96)
##   sex = f (%)                 137 (86.7)                139 ( 90.3)
##   ascites = 1 (%)              14 ( 8.9)                 10 (  6.5)
##   hepato = 1 (%)               73 (46.2)                 87 ( 56.5)
##   spiders = 1 (%)              45 (28.5)                 45 ( 29.2)
##   edema (%)
##      0                        132 (83.5)                131 ( 85.1)
##      0.5                       16 (10.1)                 13 (  8.4)
##      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]) 1214.50 [840.75, 2028.00] 1283.00 [922.50, 1949.75]
##   ast (median [IQR])       111.60 [76.73, 151.51]    117.40 [83.78, 151.90]
##   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 (median [IQR])    10.60 [10.03, 11.00]      10.60 [10.00, 11.40]
##   stage (%)
##      1                         12 ( 7.6)                  4 (  2.6)
##      2                         35 (22.2)                 32 ( 20.8)
##      3                         56 (35.4)                 64 ( 41.6)
##      4                         55 (34.8)                 54 ( 35.1)
##                          Stratified by trt
##                           p      test
##   n
##   time (mean (SD))         0.883
##   status (%)               0.894
##      0
##      1
##      2
##   trt = 2 (%)             <0.001
##   age (mean (SD))          0.018
##   sex = f (%)              0.421
##   ascites = 1 (%)          0.567
##   hepato = 1 (%)           0.088
##   spiders = 1 (%)          0.985
##   edema (%)                0.877
##      0
##      0.5
##      1
##   bili (median [IQR])      0.842 nonnorm
##   chol (median [IQR])      0.544 nonnorm
##   albumin (mean (SD))      0.874
##   copper (median [IQR])    0.717 nonnorm
##   alk.phos (median [IQR])  0.812 nonnorm
##   ast (median [IQR])       0.459 nonnorm
##   trig (median [IQR])      0.370 nonnorm
##   platelet (mean (SD))     0.555
##   protime (median [IQR])   0.588 nonnorm
##   stage (%)                0.205 exact
##      1
##      2
##      3
##      4

表格的导出

  • 方法1
# 使用quote 参数添加引号,然后复制到excel
print(tab3, nonnormal = biomarkers, exact = "stage", quote = TRUE, noSpaces = TRUE)# nosapces为去除空格的参数
##                            "Stratified by trt"
##  ""                         "1"
##   "n"                       "158"
##   "time (mean (SD))"        "2015.62 (1094.12)"
##   "status (%)"              ""
##   "   0"                    "83 (52.5)"
##   "   1"                    "10 (6.3)"
##   "   2"                    "65 (41.1)"
##   "trt = 2 (%)"             "0 (0.0)"
##   "age (mean (SD))"         "51.42 (11.01)"
##   "sex = f (%)"             "137 (86.7)"
##   "ascites = 1 (%)"         "14 (8.9)"
##   "hepato = 1 (%)"          "73 (46.2)"
##   "spiders = 1 (%)"         "45 (28.5)"
##   "edema (%)"               ""
##   "   0"                    "132 (83.5)"
##   "   0.5"                  "16 (10.1)"
##   "   1"                    "10 (6.3)"
##   "bili (median [IQR])"     "1.40 [0.80, 3.20]"
##   "chol (median [IQR])"     "315.50 [247.75, 417.00]"
##   "albumin (mean (SD))"     "3.52 (0.44)"
##   "copper (median [IQR])"   "73.00 [40.00, 121.00]"
##   "alk.phos (median [IQR])" "1214.50 [840.75, 2028.00]"
##   "ast (median [IQR])"      "111.60 [76.73, 151.51]"
##   "trig (median [IQR])"     "106.00 [84.50, 146.00]"
##   "platelet (mean (SD))"    "258.75 (100.32)"
##   "protime (median [IQR])"  "10.60 [10.03, 11.00]"
##   "stage (%)"               ""
##   "   1"                    "12 (7.6)"
##   "   2"                    "35 (22.2)"
##   "   3"                    "56 (35.4)"
##   "   4"                    "55 (34.8)"
##                            "Stratified by trt"
##  ""                         "2"                         "p"      "test"
##   "n"                       "154"                       ""       ""
##   "time (mean (SD))"        "1996.86 (1155.93)"         "0.883"  ""
##   "status (%)"              ""                          "0.894"  ""
##   "   0"                    "85 (55.2)"                 ""       ""
##   "   1"                    "9 (5.8)"                   ""       ""
##   "   2"                    "60 (39.0)"                 ""       ""
##   "trt = 2 (%)"             "154 (100.0)"               "<0.001" ""
##   "age (mean (SD))"         "48.58 (9.96)"              "0.018"  ""
##   "sex = f (%)"             "139 (90.3)"                "0.421"  ""
##   "ascites = 1 (%)"         "10 (6.5)"                  "0.567"  ""
##   "hepato = 1 (%)"          "87 (56.5)"                 "0.088"  ""
##   "spiders = 1 (%)"         "45 (29.2)"                 "0.985"  ""
##   "edema (%)"               ""                          "0.877"  ""
##   "   0"                    "131 (85.1)"                ""       ""
##   "   0.5"                  "13 (8.4)"                  ""       ""
##   "   1"                    "10 (6.5)"                  ""       ""
##   "bili (median [IQR])"     "1.30 [0.72, 3.60]"         "0.842"  "nonnorm"
##   "chol (median [IQR])"     "303.50 [254.25, 377.00]"   "0.544"  "nonnorm"
##   "albumin (mean (SD))"     "3.52 (0.40)"               "0.874"  ""
##   "copper (median [IQR])"   "73.00 [43.00, 139.00]"     "0.717"  "nonnorm"
##   "alk.phos (median [IQR])" "1283.00 [922.50, 1949.75]" "0.812"  "nonnorm"
##   "ast (median [IQR])"      "117.40 [83.78, 151.90]"    "0.459"  "nonnorm"
##   "trig (median [IQR])"     "113.00 [84.50, 155.00]"    "0.370"  "nonnorm"
##   "platelet (mean (SD))"    "265.20 (90.73)"            "0.555"  ""
##   "protime (median [IQR])"  "10.60 [10.00, 11.40]"      "0.588"  "nonnorm"
##   "stage (%)"               ""                          "0.205"  "exact"
##   "   1"                    "4 (2.6)"                   ""       ""
##   "   2"                    "32 (20.8)"                 ""       ""
##   "   3"                    "64 (41.6)"                 ""       ""
##   "   4"                    "54 (35.1)"                 ""       ""
  • 方法2
# 写入csv文件
tab3Mat <- print(tab3, nonnormal = biomarkers, exact = "stage", quote = FALSE, noSpaces = TRUE, printToggle = FALSE)# printToggle避免非必要的打印
## 写入
# write.csv(tab3Mat, file = "myTable.csv")

结束语

无话可说 love&peace