Nhập dữ liệu trong R: Đọc tệp CSV, Excel, SPSS, Stata, SAS
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 CSV
Một trong những kho lưu trữ dữ liệu rộng rãi nhất là định dạng tệp .csv (giá trị được phân tách bằng dấu phẩy). R tải một loạt thư viện trong quá trình khởi động, bao gồm cả gói utils. Gói này thuận tiện để mở tệp csv kết hợp với hàm reading.csv(). Đây là cú pháp cho read.csv
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"
R, theo mặc định, trả về các giá trị ký tự dưới dạng Yếu tố. Chúng ta có thể tắt cài đặt này bằng cách thêm stringsAsFactors = FALSE.
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ự.
Đọc file 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 không thoát, bạn có thể cài đặt nó bằng 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 bảng tính có tên clippy.xls, hãy sử dụng đơn giả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() được sử dụng rất nhiều khi mở phần mở rộng xls và xlsx.
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, R tạo ra 1 biến mới có tên X__2, X__3, X__4, X__5 và X__XNUMX
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
Chúng ta có thể thấy rằng example_1 trả về 4 hàng với 2 cột. Tập dữ liệu có tiêu đề, lý do kích thước là 4 × 2.
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
Tuy nhiên, example_2 là ma trận 4×5. Tập dữ liệu mống mắt có 5 cột có tiêu đề. Chúng tôi trả về bốn hàng đầu tiên với tiêu đề của tất cả các 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)
We can select the columns with the letter, like in 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().
read_excel() trả về NA khi một ký hiệu không có giá trị số xuất hiện trong ô. Chúng ta có thể đếm số giá trị còn thiếu bằng cách kết hợp hai hàm
- 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
Chúng tôi sẽ nhập định dạng tệp khác nhau với gói thiên đường. Hỗ trợ gói này SAS, phần mềm 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 theo 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
Chỉ có một đối số được yêu cầu trong hàm này. Chúng ta cần biết PATH nơi tệp được lưu trữ. Vậy là xong, chúng ta đã sẵn sàng mở tất cả các tệp từ SAS, STATA và SPSS. Ba chức năng này cũng chấp nhận một URL.
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 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 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 SPSS
Chúng tôi sử dụng hàm read_sav() để mở tệp SPSS. Phần mở rộng tập tin “.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 hay nhất để nhập dữ liệu
Khi chúng ta muốn nhập dữ liệu vào R, việc triển khai danh sách kiểm tra sau sẽ rất hữu ích. Nó sẽ giúp việc nhập dữ liệu chính xác vào R trở nên dễ dàng:
- Đị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 đặt tên tập dữ liệu có khoảng trắng; nó có thể dẫn đến việc giải thích như một biến riêng biệt. Ngoài ra, thích sử dụng '_' hoặc '-.'
- Ưu tiên tên ngắn
- Không bao gồm ký hiệu trong tên: ví dụ: Exchange_rate_$_€ là không chính xác. Thích đặt tên nó hơn: Exchange_rate_dollar_euro
- Nếu không, hãy sử dụng NA cho các giá trị bị thiếu; chúng ta cần phải dọn dẹp định dạng sau.
Tổng kết
Bảng sau tóm tắt hàm sử dụng để nhập các loại tệp khác nhau trong R. Cột một nêu thư viện liên quan đến hàm. Cột cuối cùng đề cập đến đối số mặc định.
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 tin, tiêu đề =,TRUE, sep = “,” |
đọ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_stata() | con đường |
trú ẩn | Đọc phần điền SPSS | read_sav() | con đường |
Bảng sau đây hiển thị những cách khác nhau để nhập lựa 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”) |