Nhập dữ liệu trong R: Đọc tệp CSV, Excel, SPSS, Stata, SAS
⚡ Tóm tắt thông minh
Hướng dẫn nhập dữ liệu trong R bao gồm cách đọc các tệp CSV bằng hàm read.csv(), sổ làm việc Excel bằng hàm readxl, và các tệp SAS, STATA hoặc SPSS bằng hàm haven. Hướng dẫn này cũng chỉ ra cách chọn chính xác các trang tính, hàng và phạm vi ô khi nhập dữ liệu.
Dữ liệu có thể tồn tại ở nhiều định dạng khác nhau. Đối với mỗi định dạng R có một chức năng và đối số cụ thể. Hướng dẫn này giải thích cách nhập dữ liệu vào R.
Đọc các tệp CSV
Định dạng dữ liệu được sử dụng rộng rãi nhất là .csv, các giá trị được phân tách bằng dấu phẩy. R tải một loạt các thư viện trong quá trình khởi động, bao gồm cả gói utils. Gói đó cung cấp hàm read.csv(), cách chuẩn để mở một tệp CSV. Đây là cú pháp:
read.csv(file, header = TRUE, sep = ",")
Tranh luận:
- hồ sơ: PATH nơi tập tin được lưu trữ
- cú đội đầu: xác nhận file có header hay không, mặc định header được đặt là TRUE
- Tháng Chín: ký hiệu dùng để phân chia biến. Theo mặc định, `,`.
Chúng ta sẽ đọc tên file dữ liệu mtcats. Tệp csv được lưu trữ trực tuyến. Nếu tệp .csv của bạn được lưu trữ cục bộ, bạn có thể thay thế PATH bên trong đoạn mã. Đừng quên bọc nó bên trong ''. PATH cần phải là một giá trị chuỗi.
Đối với người dùng mac, đường dẫn cho thư mục tải xuống là:
"/Users/USERNAME/Downloads/FILENAME.csv"
Đối với người dùng Windows:
"C:\Users\USERNAME\Downloads\FILENAME.csv"
Lưu ý rằng chúng ta phải luôn chỉ định phần mở rộng của tên tệp.
- . Csv
- .xlsx
- . Txt
- ...
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv' df <- read.csv(PATH, header = TRUE, sep = ',') length(df)
Đầu ra:
## [1] 12
class(df$X)
Đầu ra:
## [1] "factor"
Trong các phiên bản R trước 4.0.0, hàm read.csv() chuyển đổi mọi cột ký tự thành kiểu factor, đó là lý do tại sao class(df$X) trả về “factor” ở trên. Bạn có thể tắt chức năng này bằng cách sử dụng stringsAsFactors = FALSE.
⚠️ Lưu ý về phiên bản: kể từ khi R 4.0.0 Mặc định là stringsAsFactors = FALSE, vì vậy các cột ký tự vẫn giữ nguyên là ký tự và ví dụ đầu tiên hiện trả về “character” trên một cài đặt hiện đại. Truyền đối số một cách rõ ràng, như bên dưới, sẽ cho cùng một kết quả trên mọi phiên bản và là cách an toàn nhất.
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv' df <-read.csv(PATH, header =TRUE, sep = ',', stringsAsFactors =FALSE) class(df$X)
Đầu ra:
## [1] "character"
Lớp của biến X bây giờ là một ký tự.
read.csv() so với read_csv(): Nên sử dụng cái nào?
Hàm read.csv() có sẵn trong R cơ bản và không cần thêm gói nào. Gói readr bổ sung thêm hàm read_csv(), nhanh hơn và đưa ra ít quyết định thay mặt bạn hơn.
| Tiêu chí | read.csv() (utils) | read_csv() (readr) |
|---|---|---|
| Gói hàng cần thiết | Không áp dụng | người đọc |
| Tốc độ xử lý các tệp lớn | Chậm hơn | Nhanh hơn nhiều lần |
| Hoàn trả | khung dữ liệu | làm vụn |
| Tên cột | Khoảng trắng được chuyển đổi thành dấu chấm. | Giữ nguyên như đã viết. |
| Phát hiện loại | Im lặng | Được báo cáo trong phần mô tả cột. |
library(readr) df <- read_csv(PATH) # For very large files, data.table::fread() is faster still library(data.table) df <- fread(PATH)
Hãy sử dụng read_csv() cho các tệp nhỏ và các tập lệnh cần chạy mà không cần gói bổ sung. Sử dụng read_csv() khi tệp lớn hoặc khi việc giữ nguyên tên cột chính xác là quan trọng.
Đọc các tệp Excel
Excel các tập tin rất phổ biến trong số các nhà phân tích dữ liệu. Bảng tính rất dễ làm việc và linh hoạt. R được trang bị thư viện readxl để nhập bảng tính Excel.
Sử dụng mã này
require(readxl)
để kiểm tra xem readxl đã được cài đặt trong máy của bạn chưa. Nếu bạn cài đặt r bằng r-conda-essential thì thư viện đã được cài đặt sẵn. Bạn sẽ thấy trong cửa sổ lệnh:
Đầu ra:
Loading required package: readxl.
Nếu gói phần mềm chưa được cài đặt, bạn có thể cài đặt nó bằng lệnh `conda`. thư viện hoặc trong thiết bị đầu cuối, sử dụng conda install -c mittner r-readxl.
Sử dụng lệnh sau để tải thư viện để nhập tệp excel.
library(readxl)
readxl_example()
Chúng tôi sử dụng các ví dụ có trong gói readxl trong hướng dẫn này.
Sử dụng mã
readxl_example()
để xem tất cả các bảng tính có sẵn trong thư viện.
Để kiểm tra vị trí của một bảng tính cụ thể, hãy truyền tên của nó:
readxl_example("geometry.xls")
Nếu bạn cài đặt R bằng conda, bảng tính sẽ nằm trong Anaconda3/lib/R/library/readxl/extdata/filename.xls
read_excel()
Hàm read_excel() mở cả hai định dạng .xls và .xlsx và tự động chọn trình phân tích cú pháp phù hợp.
Cú pháp là:
read_excel(PATH, sheet = NULL, range= NULL, col_names = TRUE) arguments: -PATH: Path where the excel is located -sheet: Select the sheet to import. By default, all -range: Select the range to import. By default, all non-null cells -col_names: Select the columns to import. By default, all non-null columns
Chúng ta có thể nhập bảng tính từ thư viện readxl và đếm số cột trong trang tính đầu tiên.
# Store the path of `datasets.xlsx` example <- readxl_example("datasets.xlsx") # Import the spreadsheet df <- read_excel(example) # Count the number of columns length(df)
Đầu ra:
## [1] 5
excel_sheets()
Tệp Datadatas.xlsx bao gồm 4 trang tính. Chúng ta có thể tìm ra những trang tính nào có sẵn trong sổ làm việc bằng cách sử dụng hàm excel_sheets()
example <- readxl_example("datasets.xlsx")
excel_sheets(example)
Đầu ra:
[1] "iris" "mtcars" "chickwts" "quakes"
Nếu một trang tính bao gồm nhiều trang tính, bạn có thể dễ dàng chọn một trang tính cụ thể bằng cách sử dụng các đối số trang tính. Chúng ta có thể chỉ định tên của trang tính hoặc chỉ mục trang tính. Chúng ta có thể xác minh xem cả hai hàm có trả về cùng một kết quả có giống hệt() hay không.
example <- readxl_example("datasets.xlsx") quake <- read_excel(example, sheet = "quakes") quake_1 <-read_excel(example, sheet = 4) identical(quake, quake_1)
Đầu ra:
## [1] TRUE
Chúng ta có thể kiểm soát ô nào sẽ đọc theo 2 cách
- Sử dụng đối số n_max để trả về n hàng
- Sử dụng đối số phạm vi kết hợp với cell_rows hoặc cell_cols
Ví dụ: chúng tôi đặt n_max bằng 5 để nhập năm hàng đầu tiên.
# Read the first five row: with header iris <-read_excel(example, n_max =5, col_names =TRUE)
Nếu chúng ta thay đổi col_names thành FALSE, R sẽ tự động tạo tiêu đề.
# Read the first five row: without header iris_no_header <-read_excel(example, n_max =5, col_names =FALSE)
iris_no_header
Trong khung dữ liệu iris_no_header, readxl đã tạo ra năm tên giữ chỗ. Các phiên bản cũ hơn tạo ra X__1 đến X__5, trong khi các phiên bản hiện tại tạo ra …1 đến …5.
Chúng ta cũng có thể sử dụng phạm vi đối số để chọn hàng và cột trong bảng tính. Trong đoạn mã bên dưới, chúng tôi sử dụng kiểu excel để chọn phạm vi từ A1 đến B5.
# Read rows A1 to B5 example_1 <-read_excel(example, range = "A1:B5", col_names =TRUE) dim(example_1)
Đầu ra:
## [1] 4 2
Ví dụ 1 trả về 4 hàng và 2 cột. Phạm vi A1:B5 bao gồm năm hàng trong bảng tính, nhưng hàng đầu tiên được sử dụng làm tiêu đề, đó là lý do tại sao kích thước là 4x2.
Trong ví dụ thứ hai, chúng ta sử dụng hàm cell_rows() để kiểm soát phạm vi hàng cần trả về. Nếu muốn nhập các hàng từ 1 đến 5, chúng ta có thể đặt cell_rows(1:5). Lưu ý rằng, cell_rows(1:5) trả về cùng kết quả như cell_rows(5:1).
# Read rows 1 to 5 example_2 <-read_excel(example, range =cell_rows(1:5),col_names =TRUE) dim(example_2)
Đầu ra:
## [1] 4 5
Ngược lại, example_2 có kích thước 4x5. cell_rows(1:5) lại coi hàng đầu tiên là tiêu đề, do đó bốn hàng dữ liệu được trả về trên cả năm cột.
Trong trường hợp chúng tôi muốn nhập các hàng không bắt đầu ở hàng đầu tiên, chúng tôi phải thêm col_names = FALSE. Nếu chúng ta sử dụng range = cell_rows(2:5), rõ ràng khung dữ liệu của chúng ta không còn tiêu đề nữa.
iris_row_with_header <-read_excel(example, range =cell_rows(2:3), col_names=TRUE) iris_row_no_header <-read_excel(example, range =cell_rows(2:3),col_names =FALSE)
Bạn cũng có thể chọn các cột theo chữ cái, giống hệt như trong Excel:
# Select columns A and B col <- read_excel(example, range = cell_cols("A:B")) dim(col)
Đầu ra:
## [1] 150 2
Lưu ý: range = cell_cols(“A:B”), trả về kết quả đầu ra là tất cả các ô có giá trị khác null. Tập dữ liệu chứa 150 hàng, do đó, read_excel() trả về các hàng lên tới 150. Điều này được xác minh bằng hàm dim().
Tham số `na` cho hàm `read_excel()` biết những giá trị nào cần được coi là thiếu. Hãy đếm chúng bằng hàm `sum()` và `is.na()`:
- tổng hợp
- là.na
Đây là mã
iris_na <-read_excel(example, na ="setosa") sum(is.na(iris_na))
Đầu ra:
## [1] 50
Chúng tôi thiếu 50 giá trị, đó là các hàng thuộc loài setosa.
Nhập dữ liệu từ phần mềm thống kê khác
Các tệp từ các phần mềm thống kê khác được nhập cùng với trú ẩn gói phần mềm hỗ trợ SAS, STATA và SPSS. Chúng ta có thể sử dụng hàm sau để mở các loại tập dữ liệu khác nhau, tùy thuộc vào phần mở rộng của tệp:
- SAS: read_sas()
- STATA: read_dta() (hoặc read_stata(), giống hệt nhau)
- SPSS: read_sav() hoặc read_por(). Chúng tôi cần kiểm tra phần mở rộng
Mỗi hàm này chỉ cần một đối số duy nhất, đó là đường dẫn nơi tệp được lưu trữ, và mỗi hàm đều chấp nhận một URL Dễ dàng như một con đường địa phương.
library(haven)
haven đi kèm với conda r-essential nếu không hãy đến liên kết này hoặc trong terminal conda install -c conda-forge r-haven
Đọc các tệp SAS
Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng tập dữ liệu nhập học từ IDRE.
PATH_sas <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sas7bdat?raw=true' df <- read_sas(PATH_sas) head(df)
Đầu ra:
## # A tibble: 6 x 4 ## ADMIT GRE GPA RANK ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
Đọc các tệp STATA
Đối với các tệp dữ liệu STATA, bạn có thể sử dụng read_dta(). Chúng tôi sử dụng chính xác cùng một tập dữ liệu nhưng lưu trữ trong tệp .dta.
PATH_stata <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.dta?raw=true' df <- read_dta(PATH_stata) head(df)
Đầu ra:
## # A tibble: 6 x 4 ## admit gre gpa rank ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
Đọc các tệp SPSS
Hàm read_sav() mở một tệp SPSS có phần mở rộng .sav.
PATH_spss <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sav?raw=true' df <- read_sav(PATH_spss) head(df)
Đầu ra:
## # A tibble: 6 x 4 ## admit gre gpa rank ## <dbl> <dbl> <dbl> <dbl> ## 1 0 380 3.61 3 ## 2 1 660 3.67 3 ## 3 1 800 4.00 1 ## 4 1 640 3.19 4 ## 5 0 520 2.93 4 ## 6 1 760 3.00 2
Các phương pháp tốt nhất để nhập dữ liệu
Việc kiểm tra danh sách dưới đây trước khi nhập dữ liệu sẽ giúp bạn tiết kiệm được phần lớn công sức dọn dẹp sau đó:
- Định dạng điển hình cho bảng tính là sử dụng các hàng đầu tiên làm tiêu đề (thường là tên biến).
- Tránh sử dụng khoảng trắng trong tên tệp hoặc tên cột, vì chúng có thể được hiểu là dấu phân cách cột. Thay vào đó, hãy sử dụng dấu gạch dưới.
- Ưu tiên tên ngắn
- Không sử dụng ký hiệu trong tên. Hãy viết exchange_rate_dollar_euro thay vì exchange_rate_$_€.
- Hãy mã hóa các giá trị thiếu dưới dạng NA thay vì khoảng trắng, dấu gạch ngang hoặc các số đặc biệt như -99, vì nếu không sẽ phải xử lý lại sau đó.
Nhập dữ liệu trong R: Tham khảo hàm
Bảng dưới đây liệt kê hàm nhập khẩu cho từng loại tệp, thư viện cung cấp hàm đó và các tham số mặc định của nó:
| Thư viện | Mục tiêu | Chức năng | Đối số mặc định |
|---|---|---|---|
| utils | Đọc tệp CSV | đọc.csv() | tệp, tiêu đề = TRUE, dấu phân cách = “,” |
| đọcxl | Đọc tệp EXCEL | read_excel() | đường dẫn, phạm vi = NULL, col_names = TRUE |
| trú ẩn | Đọc tập tin SAS | read_sas() | con đường |
| trú ẩn | Đọc tệp STATA | read_dta() / read_stata() | con đường |
| trú ẩn | Đọc tệp SPSS | read_sav() | con đường |
Bảng thứ hai hiển thị các cách nhập một vùng chọn bằng hàm read_excel():
| Chức năng | Mục tiêu | Lập luận |
|---|---|---|
| read_excel() | Đọc n số hàng | n_max = 10 |
| Chọn hàng và cột như trong excel | phạm vi = “A1:D10” | |
| Chọn các hàng có chỉ mục | phạm vi= ô_rows(1:3) | |
| Chọn cột có chữ cái | phạm vi = cell_cols(“A:C”) |








