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é.

Đầu tiên là phần cài đặt, phần này tương tự như các package cơ bản khác.

install.packages("docxtractr")

Sau khi cài đặt xong, ta load package lên

library(docxtractr)

Cùng tìm hiểu nào:

Các hàm cơ bản được viết trong thư viện

  • read_docx: dùng để dọc file word
  • docx_describe_tbls: Xem thông tin về các table trong word
  • docx_describe_cmntss: Xem thông tin về các comment trong file word
  • docx_extract_tbl: Xuất table trong file word
  • docx_extract_all_cmnts: Xuất ra tất cả comment trong file word
  • docx_extract_all_tbls: Xuất ra tất cả table trong file word
  • docx_tbl_count: Đếm số table có trong file word
  • docx_cmnt_count: Đếm số comment có trong file word
  • assign_colnames: tạo data.frame từ một số cột mong muốn

Dữ liệu mẫu

Ngoà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 CRANGITHUB

(Nguồn tham khảo: GITHUB)

(Bài được viết với R Markdown)