Package table1

Đây là package chuyên để thực hiện thống kê mô tả rất hữu ích để tổng quát nhanh chóng một bộ dữ liệu, giúp tìm ra đặc điểm dữ liệu bị sai sót để người dùng có thể chỉnh sửa kịp thời. [record]

Cú pháp cơ bản

library(table1)
library(flextable)
library(magrittr)
library(openxlsx)
library(dplyr)

mtcars$vs <- factor(mtcars$vs)
mtcars$cyl <- factor(mtcars$cyl)
mtcars$am <- factor(mtcars$am)
mtcars[1:3, 1:3] <- NA

table_freq <- table1:::table1.formula( ~ . | vs,
                     topclass="Rtable1-grid",
                     data = mtcars,
                    # digits = 4,
                    render.continuous = c("Mean (± SD)" = "MEAN (± SD)",
                                          "Median [Min, Max]" = "MEDIAN [MIN, MAX]")
                          )

table_freq
0
(N=18)
1
(N=14)
Overall
(N=32)
mpg
Mean (± SD) 16.1 (± 3.74) 24.7 (± 5.57) 19.9 (± 6.31)
Median [Min, Max] 15.4 [10.4, 26.0] 22.8 [17.8, 33.9] 18.7 [10.4, 33.9]
Missing 2 (11.1%) 1 (7.1%) 3 (9.4%)
cyl
4 1 (5.6%) 9 (64.3%) 10 (31.3%)
6 1 (5.6%) 4 (28.6%) 5 (15.6%)
8 14 (77.8%) 0 (0%) 14 (43.8%)
Missing 2 (11.1%) 1 (7.1%) 3 (9.4%)
disp
Mean (± SD) 326 (± 98.3) 134 (± 58.8) 240 (± 127)
Median [Min, Max] 334 [120, 472] 121 [71.1, 258] 258 [71.1, 472]
Missing 2 (11.1%) 1 (7.1%) 3 (9.4%)
hp
Mean (± SD) 190 (± 60.3) 91.4 (± 24.4) 147 (± 68.6)
Median [Min, Max] 180 [91.0, 335] 96.0 [52.0, 123] 123 [52.0, 335]
drat
Mean (± SD) 3.39 (± 0.474) 3.86 (± 0.506) 3.60 (± 0.535)
Median [Min, Max] 3.18 [2.76, 4.43] 3.92 [2.76, 4.93] 3.70 [2.76, 4.93]
wt
Mean (± SD) 3.69 (± 0.904) 2.61 (± 0.715) 3.22 (± 0.978)
Median [Min, Max] 3.57 [2.14, 5.42] 2.62 [1.51, 3.46] 3.33 [1.51, 5.42]
qsec
Mean (± SD) 16.7 (± 1.09) 19.3 (± 1.35) 17.8 (± 1.79)
Median [Min, Max] 17.0 [14.5, 18.0] 19.2 [16.9, 22.9] 17.7 [14.5, 22.9]
am
0 12 (66.7%) 7 (50.0%) 19 (59.4%)
1 6 (33.3%) 7 (50.0%) 13 (40.6%)
gear
Mean (± SD) 3.56 (± 0.856) 3.86 (± 0.535) 3.69 (± 0.738)
Median [Min, Max] 3.00 [3.00, 5.00] 4.00 [3.00, 5.00] 4.00 [3.00, 5.00]
carb
Mean (± SD) 3.61 (± 1.54) 1.79 (± 1.05) 2.81 (± 1.62)
Median [Min, Max] 4.00 [2.00, 8.00] 1.50 [1.00, 4.00] 2.00 [1.00, 8.00]

Thay dấu . decimal point thành dấu ,

Dataset minh họa sinhvien.xlsx

options("OutDec" = ",") # thay đổi dấu decimal ở đây

library(readxl)

sinhvien <- read_excel("dataset/sinhvien.xlsx")

sinhvien$`Tốt nghiệp` <- factor(sinhvien$`Tốt nghiệp`,
                                levels = c(0, 1))
# summary(sinhvien)

table_freq <- table1:::table1.formula( ~ . | `Giới tính`,
                     topclass="Rtable1-grid",
                     data = sinhvien[ , -1],
                    # digits = 4,
                    overall = "Tổng cộng",
                    render.continuous = c("Mean (± SD)" = "MEAN (± SD)",
                                          "Median [IQR]" = "MEDIAN [IQR]",
                                          "Min" = "MIN",
                                          "Max" = "MAX")
                          )

table_freq
Nam
(N=4129)
Nữ
(N=4110)
Tổng cộng
(N=8239)
Tuổi
Mean (± SD) 22,5 (± 5,85) 22,6 (± 6,27) 22,5 (± 6,07)
Median [IQR] 21,0 [3,00] 21,0 [3,00] 21,0 [3,00]
Min 18,0 18,0 18,0
Max 63,0 64,0 64,0
Chiều cao
Mean (± SD) 179 (± 7,99) 164 (± 7,92) 171 (± 11,1)
Median [IQR] 179 [10,0] 164 [11,0] 171 [17,0]
Min 144 135 135
Max 206 193 206
Cân nặng
Mean (± SD) 78,6 (± 7,67) 67,4 (± 5,23) 73,0 (± 8,64)
Median [IQR] 77,9 [10,0] 67,0 [6,90] 71,8 [12,0]
Min 56,9 51,4 51,4
Max 116 93,8 116
Điểm môn học
Mean (± SD) 2,18 (± 0,805) 2,15 (± 0,818) 2,17 (± 0,812)
Median [IQR] 2,08 [1,30] 2,00 [1,32] 2,04 [1,32]
Min 1,00 1,00 1,00
Max 4,00 4,00 4,00
Năm học
Năm 1 794 (19,2%) 915 (22,3%) 1709 (20,7%)
Năm 2 709 (17,2%) 929 (22,6%) 1638 (19,9%)
Năm 3 726 (17,6%) 915 (22,3%) 1641 (19,9%)
Năm 4 633 (15,3%) 735 (17,9%) 1368 (16,6%)
Năm 5 1267 (30,7%) 616 (15,0%) 1883 (22,9%)
Ngành học
Biology 638 (15,5%) 959 (23,3%) 1597 (19,4%)
Economics and Finance 863 (20,9%) 461 (11,2%) 1324 (16,1%)
Environmental Sciences 881 (21,3%) 745 (18,1%) 1626 (19,7%)
Mathematics and Statistics 949 (23,0%) 276 (6,7%) 1225 (14,9%)
Political Science 477 (11,6%) 978 (23,8%) 1455 (17,7%)
Social Sciences 321 (7,8%) 691 (16,8%) 1012 (12,3%)
Tốt nghiệp
0 3050 (73,9%) 3436 (83,6%) 6486 (78,7%)
1 1079 (26,1%) 674 (16,4%) 1753 (21,3%)
Chi phí sinh hoạt
Mean (± SD) 46600 (± 9660) 36000 (± 7730) 42500 (± 10300)
Median [IQR] 46000 [13500] 35700 [10700] 41700 [14200]
Min 14100 11400 11400
Max 75600 63200 75600
Missing 3050 (73,9%) 3436 (83,6%) 6486 (78,7%)

Xuất kết quả ra file Word và Excel

# export ra word
table1:::t1flex(table_freq) %>%
  flextable:::save_as_docx(path = "dataset/table_freq.docx")

# export ra excel
openxlsx:::write.xlsx(table_freq, file = "table_freq.xlsx")

Mặc định thì format xuất ra Word sẽ chưa đẹp lắm, ta có thể vào mục Table Layout/Chọn AutoFit Window, sau đó chọn font chữ và size chữ phù hợp. Để các dòng khít lại với nhau, ta vào mục Layout, chọn Spacing (Before và After = 0 pt).

Credit: Cảm ơn Dr. Lê Kiều Chinh đã đề xuất câu hỏi để mình tìm cách format thay dấu chấm bằng dấu phẩy ở số thập phân từ kết quả xuất ra của package table1.

Tham khảo

https://cran.r-project.org/web/packages/table1/vignettes/table1-examples.html

https://github.com/benjaminrich/table1/issues/34