Xin chào các bạn, trong trường hợp chúng ta cần phân tích nhiều bảng dữ liệu, nhưng các bảng dữ liệu đó lại được lưu trong file word. Vậy chúng ta có thể làm thủ công bằng cách copy sang Excel rồi lưu thành các file *.csv để load trong R.
Nhưng nếu mình có rất nhiều bảng thì sao, rất may là tác giả Bob Rudis (bob@rudis.net) đã viết cho chúng ta gói package docxtractr. Đây là gói thư viện mới cho R, sử dụng với mục đích để đọc và trích các table có trong file word vào R. Chúng ta cùng tìm hiểu sơ qua về gói docxtractr này nhé.
install.packages("docxtractr")
library(docxtractr)
read_docx: dùng để dọc file worddocx_describe_tbls: Xem thông tin về các table trong worddocx_describe_cmntss: Xem thông tin về các comment trong file worddocx_extract_tbl: Xuất table trong file worddocx_extract_all_cmnts: Xuất ra tất cả comment trong file worddocx_extract_all_tbls: Xuất ra tất cả table trong file worddocx_tbl_count: Đếm số table có trong file worddocx_cmnt_count: Đếm số comment có trong file wordassign_colnames: tạo data.frame từ một số cột mong muốnNgoài ra gói thư viện này cũng có sẵn một số dữ liệu để chúng ta có thể thử nghiệm. Các bạn có thể sử dụng các lệnh sau để load file
-system.file("examples/data.docx", package="docxtractr"): có 1 bảng
-system.file("examples/data3.docx", package="docxtractr"): có 3 bảng
-system.file("examples/none.docx", package="docxtractr"): không có bảng nào
-system.file("examples/complex.docx", package="docxtractr"): bảng không đồng nhất
-system.file("examples/comments.docx", package="docxtractr"): có chứa comment
-system.file("examples/realworld.docx", package="docxtractr"): Bảng với nhiều định dạng phức tạp
Mình sẽ thử nghiệm với file data3.docx có chứa 3 table như sau:
Đọc file data3.docx và lưu vào biến doc
doc <- read_docx(system.file("examples/data3.docx", package="docxtractr"))
Đếm số lượng bảng trong file word với hàm docx_tbl_count:
docx_tbl_count(doc)
[1] 3
Ta thấy kết quả trả về là 3. Bây giờ ta có thể xem thông tin mô tả về file word với hàm docx_describe_tbls:
docx_describe_tbls(doc)
Word document [C:/Users/NLXBach/Documents/R/win-library/3.3/docxtractr/examples/data3.docx]
Table 1
total cells: 16
row count : 4
uniform : likely!
has header : likely! => possibly [This, Is, A, Column]
Table 2
total cells: 12
row count : 4
uniform : likely!
has header : likely! => possibly [Foo, Bar, Baz]
Table 3
total cells: 14
row count : 7
uniform : likely!
has header : likely! => possibly [Foo, Bar]
R sẽ cho ta biết số table, số hàng, số cột trong từng table của file word. Để xem được nội dung từng table, ta có thể dùng lệnh docx_extract_tblnhư sau:
Bảng 1:
docx_extract_tbl(doc, 1)
This Is A Column
1 1 Cat 3.4 Dog
2 3 Fish 100.3 Bird
3 5 Pelican -99 Kangaroo
Bảng 2:
docx_extract_tbl(doc, 2)
Foo Bar Baz
1 Aa Bb Cc
2 Dd Ee Ff
3 Gg Hh ii
Bảng 3:
docx_extract_tbl(doc, 3)
Foo Bar
1 Aa Bb
2 Dd Ee
3 Gg Hh
4 1 2
5 Zz Jj
6 Tt ii
Ngoài ra ta có thể dùng lệnh header=FALSE để báo cho R biết dòng đầu tiên trong bảng không phải là tiêu đề. Ví dụ:
docx_extract_tbl(doc, 1, header = F)
V1 V2 V3 V4
1 This Is A Column
2 1 Cat 3.4 Dog
3 3 Fish 100.3 Bird
4 5 Pelican -99 Kangaroo
Thật là tiện lợi phải không nào. Các bạn có thể thử nghiệm với các table khác. Ngoài ra các bạn có thể xem thông tin giới thiệu package tại CRAN và GITHUB
(Nguồn tham khảo: GITHUB)
(Bài được viết với R Markdown)