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.

Readxl_Ví dụ

Để 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")

Readxl_Ví dụ

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

  1. Sử dụng đối số n_max để trả về n hàng
  2. 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)

Excel_Trang tính

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

Excel_Trang tính

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.

Excel_Trang tính

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

Excel_Trang tính

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)

Excel_Trang tính

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

  1. tổng hợp
  2. 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”)