Chuyển đến nội dung chính

Đọc và nhập tệp Excel vào R với readxl

Trong bài viết này, tìm hiểu cách nhập tệp Excel vào R với thư viện readxl.
· 5 phút đọc

Khám phá cùng AI

Mặc dù nhiều tổ chức lưu trữ dữ liệu trong cơ sở dữ liệu và các tùy chọn lưu trữ như AWS, Azure và GCP, bảng tính Microsoft Excel vẫn được sử dụng rộng rãi để lưu các tập dữ liệu nhỏ hơn.

Chức năng khoa học dữ liệu của Excel bị hạn chế hơn R, vì vậy việc có thể nhập dữ liệu từ bảng tính vào R là rất hữu ích.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách đọc các trang tính Excel (cũng như các hàng và cột cụ thể) vào R bằng gói readxl.

Để theo kịp, bạn cần có kiến thức cơ bản về R. 

Để có hướng dẫn tổng quát hơn về cách nhập nhiều loại tệp khác nhau vào R, hãy đọc Cách nhập dữ liệu vào R: Hướng dẫn.

Tệp Excel

Tập dữ liệu chúng ta sẽ đọc vào R là một tập nhỏ chỉ có hai trang để minh họa cách chỉ định trang nào cần đọc. Bạn có thể tìm thấy tại đây.

Trang đầu tiên là tập dữ liệu tiếp thị ngân hàng với 45.211 hàng và 17 cột. Ảnh chụp màn hình bên dưới từ tệp excel “sample.xlsx” và tên trang “bank-full”.

Screenshot 2023-03-08 at 9.05.49 PM.png

Trang thứ hai là tập dữ liệu Iris với 150 hàng và 6 cột, chứa thông tin về các loài hoa Iris như chiều dài và chiều rộng đài hoa, cánh hoa. Ảnh chụp màn hình bên dưới từ cùng tệp excel “sample.xlsx” và tên trang “iris”. 

Screenshot 2023-03-08 at 9.08.53 PM.png

Tổng quan về các gói

Hướng dẫn này sử dụng gói readxl. Gói openxlsx là một lựa chọn thay thế khá tốt, cũng bao gồm khả năng ghi ra tệp XLSX, nhưng tích hợp kém chặt chẽ hơn với các gói tidyverse như dplyr và tidyr.

Để đọc tệp Excel với gói readxl, trước tiên chúng ta cần cài đặt gói và sau đó nhập nó bằng hàm “library”.

install.packages("readxl")

Bạn sẽ thấy đầu ra dưới đây trong bảng điều khiển, báo hiệu việc cài đặt thành công.

trying URL 'https://cran.rstudio.com/bin/macosx/big-sur-arm64/contrib/4.2/readxl_1.4.2.tgz'
Content type 'application/x-gzip' length 1545782 bytes (1.5 MB)
==================================================
downloaded 1.5 MB


The downloaded binary packages are in
/var/folders/mq/46mc_8tj06n0wh2xjkk08r140000gn/T//RtmpHIGYqM/downloaded_packages

Để sử dụng các phương thức “readxl”, hãy chạy lệnh dưới đây trong R-console.

library(readxl)

Lưu ý rằng gói openxlsx là một lựa chọn thay thế tốt khác để ghi ra tệp XLSX.

Đọc trang tính đầu tiên

Hãy đọc toàn bộ dữ liệu từ trang tính đầu tiên, “bank-full”, bằng read_xlsx() và chỉ dùng đối số path.

bank_df <- read_xlsx(path = "sample.xlsx")

Dữ liệu thu được là một tibble.

Screenshot 2023-03-09 at 7.40.15 AM.png

Bạn cũng có thể dùng read_excel() theo cách tương tự như read_xlsx(), và tất cả các đối số bạn sẽ thấy ở các phần tiếp theo cũng hoạt động tương tự với hàm này. read_excel() sẽ cố gắng đoán xem bạn có bảng tính XLSX hay loại XLS cũ hơn.

bank_df <- read_excel(path = "sample.xlsx")

Screenshot 2023-03-09 at 7.40.15 AM (1).png

Đọc các trang tính khác

Bây giờ hãy đọc toàn bộ dữ liệu từ trang tính thứ hai, tức “iris”, với hàm read_xlsx() và đối số sheet.

iris <- read_xlsx("sample.xlsx", sheet = "iris")

Screenshot 2023-03-09 at 7.12.08 AM.png

Bạn cũng có thể chỉ định số thứ tự trang trong đối số sheet thay vì tên trang.

iris2 <- read_xlsx("sample.xlsx", sheet = 1)

Screenshot 2023-03-09 at 7.12.21 AM.png

Đọc các hàng cụ thể

Hãy đọc các hàng cụ thể từ một trang tính bằng cách thiết lập các đối số skip và n_max. Để bỏ qua vài hàng đầu, bạn có thể dùng đối số skip với giá trị bằng số hàng muốn bỏ qua.

bank_df_s2 <- read_excel("sample.xlsx", sheet = "bank-full", skip = 2)

Lưu ý rằng đoạn mã trên cũng bỏ qua cả hàng tiêu đề. Bạn sẽ học cách chỉ định tiêu đề rõ ràng trong hàm read_xlsx() ở các phần sau.

Screenshot 2023-03-09 at 7.17.01 AM.png

Tương tự, để đọc n hàng đầu tiên, hãy chỉ định đối số n_max trong hàm read_xlsx(). Đoạn mã dưới đây đọc 1000 hàng đầu tiên của trang “bank-full”.

bank_df_n1k <- read_excel("sample.xlsx", sheet = "bank-full", n_max = 1000)

Screenshot 2023-03-09 at 7.18.41 AM.png

Bạn cũng có thể kết hợp cả hai đối số để bỏ qua một số hàng và đọc một số lượng hàng cụ thể từ phần dữ liệu còn lại.

Đọc các ô cụ thể

Trong khi các đối số “skip” và “n_max” cho phép bạn đọc một phần tập dữ liệu theo hàng, bạn có thể đọc các ô cụ thể từ một trang tính bằng cách thiết lập đối số range.

Có hai kiểu ký hiệu để chỉ định phần con của tập dữ liệu:

  • Ký hiệu A1 (E4:G8) - A biểu diễn cột, và 1 biểu diễn số hàng.
  • Ký hiệu R1C1 (R4C5:R8C7) - Chỉ rõ số hàng và số cột

Ý tưởng là chỉ định tọa độ của hình chữ nhật bạn muốn cắt ra từ tập dữ liệu.

Ký hiệu 1:

bank_df_range1 <- read_excel("sample.xlsx", sheet = "bank-full", range = "A3:E10")

Ký hiệu 2:

bank_df_range2 <- read_excel("sample.xlsx", sheet = "bank-full", 

                 range = "R3C1:R10C5")

Range cũng cho phép bạn bao gồm tên trang trong đối số (ví dụ: wbook!E4:G8).

bank_df_range3 <- read_excel("sample.xlsx", range = "bank-full!R3C1:R10C5")

Đọc dữ liệu không có hàng tiêu đề

Hãy đọc dữ liệu không có hàng tiêu đề bằng cách đặt đối số col_names thành một vector ký tự. 

PS: Trước tiên chúng ta dùng đối số skip để loại bỏ hàng tiêu đề.

columns <- c("ID", "Sepal Length", "Sepal Width", "Petal Length", "Petal Width", "Species Name")

iris3 <- read_excel("sample.xlsx", sheet = 2, skip = 1, col_names = columns)

Screenshot 2023-03-09 at 7.19.30 AM.png

Sửa tên tiêu đề

Ở phần cuối, các tiêu đề chúng ta chỉ định được phân tách bằng dấu cách. Bạn có thể chuyển tên tiêu đề thành các biến R hợp lệ về cú pháp với đối số .name_repair = "universal".

iris4 <- read_excel("sample.xlsx", sheet = 2, skip = 1,
                  col_names = columns, .name_repair = "universal")

Screenshot 2023-03-09 at 7.19.56 AM.png

Chỉ định kiểu cột

Theo mặc định, khi bạn đọc một tệp excel, R sẽ đoán kiểu dữ liệu của từng biến.  Hãy xem kiểu cột của tập dữ liệu iris được đọc bằng các đối số mặc định.

sapply(iris, class)
  Id SepalLengthCm  SepalWidthCm PetalLengthCm  PetalWidthCm       Species
    "numeric"     "numeric"     "numeric"     "numeric"     "numeric"   "character" 

Để ghi đè việc đoán kiểu cột, bạn có thể dùng đối số col_types.

iris5 <- read_excel("sample.xlsx", sheet = 2,
      col_types = c("numeric", "numeric", "numeric", "numeric", "numeric", "text"))

sapply(iris5, class)
    Id SepalLengthCm  SepalWidthCm PetalLengthCm  PetalWidthCm       Species
    "numeric"     "numeric"     "numeric"     "numeric"     "numeric"   "character" 

Screenshot 2023-03-09 at 7.20.14 AM.png

Bạn cũng có thể để R đoán kiểu cột của một số biến được chọn bằng cách chỉ định giá trị col_types là “guess” cho một cột cụ thể.

iris6 <- read_excel("sample.xlsx", sheet = 2,
        col_types = c("guess", "numeric", "numeric", "numeric", "numeric", "text"))

sapply(iris6, class)
Id SepalLengthCm  SepalWidthCm PetalLengthCm  PetalWidthCm       Species
    "numeric"     "numeric"     "numeric"     "numeric"     "numeric"   "character" 

Screenshot 2023-03-09 at 7.20.27 AM.png

Bỏ qua cột

Bạn thường nghe nói rằng dữ liệu càng nhiều càng tốt. Nhưng trong nhiều trường hợp sử dụng, bạn sẽ thấy rằng một số biến/cột không mang tín hiệu nào, có thể vì bất kỳ lý do nào dưới đây. 

  • độ phân biệt cao: hầu như mỗi giá trị đều khác nhau
  • độ phân biệt bằng không: mọi giá trị đều giống nhau
  • không liên quan đến bài toán nghiệp vụ
  • quá nhiều giá trị thiếu
  • quá nhiều giá trị rác

Bạn có thể bỏ qua việc đọc một số cột bằng cách đặt col_types thành "skip" như minh họa dưới đây.

iris7 <- read_excel("sample.xlsx", sheet = 2,
            col_types = c("numeric", "skip", "skip", "numeric", "numeric", "text"))

sapply(iris7, class)

Screenshot 2023-03-09 at 7.20.36 AM.pngNâng cấp kỹ năng của bạn

Trong một thế giới nơi dữ liệu được tạo ra với tốc độ khổng lồ và ở nhiều dạng khác nhau, ngôn ngữ lập trình của bạn phải hỗ trợ đọc các kiểu dữ liệu này. R là một trong những ngôn ngữ mạnh mẽ hỗ trợ nỗ lực đó. Hãy đăng ký khóa học “Introduction to Importing Data in R” để tìm hiểu cách R cung cấp các gói để nhập nhiều tập dữ liệu khác nhau. Khóa học này cung cấp các bài hướng dẫn và câu hỏi trắc nghiệm để củng cố hiểu biết của bạn về việc nhập dữ liệu trong R.

Câu hỏi thường gặp

R có thể nhập cả dữ liệu CSV và Excel cho các dự án không?

Có, R có thể nhập cả dữ liệu CSV và Excel cho các dự án, và R cung cấp các gói cùng hàm mạnh mẽ để xử lý cả hai định dạng. Đọc hướng dẫn của chúng tôi về CSV so với Excel để có so sánh chi tiết và hướng dẫn về việc đưa ra lựa chọn phù hợp cho dự án dữ liệu của bạn.

Chủ đề

Liên quan