นำเข้าข้อมูลใน R: อ่านไฟล์ CSV, Excel, SPSS, Stata, SAS

ข้อมูลอาจมีอยู่ในรูปแบบต่างๆ สำหรับแต่ละรูปแบบ R มีฟังก์ชันและอาร์กิวเมนต์เฉพาะ บทช่วยสอนนี้จะอธิบายวิธีการนำเข้าข้อมูลไปยัง R

อ่านไฟล์ CSV

หนึ่งในแหล่งเก็บข้อมูลที่แพร่หลายที่สุดคือรูปแบบไฟล์ .csv (ค่าที่คั่นด้วยเครื่องหมายจุลภาค) R โหลดอาร์เรย์ของไลบรารีระหว่างการเริ่มต้นระบบ รวมถึงแพ็คเกจ utils ด้วย แพ็คเกจนี้สะดวกในการเปิดไฟล์ csv รวมกับฟังก์ชัน reading.csv() นี่คือไวยากรณ์สำหรับ read.csv

read.csv(file, header = TRUE, sep = ",")

ข้อโต้แย้ง:

  • ไฟล์: PATH ที่เก็บไฟล์
  • ส่วนหัว: ยืนยันว่าไฟล์มีส่วนหัวหรือไม่ โดยค่าเริ่มต้น ส่วนหัวจะถูกตั้งค่าเป็น TRUE
  • กันยายน: สัญลักษณ์ที่ใช้แยกตัวแปร โดยค่าเริ่มต้น `,`

เราจะอ่านชื่อไฟล์ข้อมูล mtcats ไฟล์ CSV จะถูกจัดเก็บออนไลน์ หากไฟล์ .csv ของคุณถูกจัดเก็บไว้ในเครื่อง คุณสามารถแทนที่ PATH ภายในข้อมูลโค้ดได้ อย่าลืมห่อไว้ข้างใน '' PATH จะต้องเป็นค่าสตริง

สำหรับผู้ใช้ Mac เส้นทางสำหรับโฟลเดอร์ดาวน์โหลดคือ:

 "/Users/USERNAME/Downloads/FILENAME.csv"

สำหรับผู้ใช้ Windows:

"C:\Users\USERNAME\Downloads\FILENAME.csv"

โปรดทราบว่าเราควรระบุนามสกุลของชื่อไฟล์เสมอ

  • . Csv
  • .xlsx
  • txt.
  • ...
PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv'                
df <- read.csv(PATH, header =  TRUE, sep = ',')
length(df)

เอาท์พุต

## [1] 12
class(df$X)

เอาท์พุต

## [1] "factor"

ตามค่าเริ่มต้น R จะส่งกลับค่าอักขระเป็นตัวประกอบ เราสามารถปิดการตั้งค่านี้ได้โดยเพิ่ม 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)

เอาท์พุต

## [1] "character"

คลาสสำหรับตัวแปร X กลายเป็นอักขระแล้ว

อ่านไฟล์ Excel

Excel ไฟล์เป็นที่นิยมมากในหมู่นักวิเคราะห์ข้อมูล สเปรดชีตใช้งานง่ายและยืดหยุ่น R ติดตั้งไลบรารี readxl เพื่อนำเข้าสเปรดชีต Excel

ใช้รหัสนี้

require(readxl)

เพื่อตรวจสอบว่ามีการติดตั้ง readxl ในเครื่องของคุณหรือไม่ หากคุณติดตั้ง r ด้วย r-conda-essential แสดงว่าไลบรารีได้รับการติดตั้งแล้ว คุณควรเห็นในหน้าต่างคำสั่ง:

เอาท์พุต

Loading required package: readxl.

หากแพ็กเกจไม่ออก คุณสามารถติดตั้งพร้อมกับ conda ห้องสมุด หรือในเทอร์มินัล ให้ใช้ conda install -c mittner r-readxl

ใช้คำสั่งต่อไปนี้เพื่อโหลดไลบรารีเพื่อนำเข้าไฟล์ Excel

library(readxl)

readxl_example()

เราใช้ตัวอย่างที่รวมอยู่ในแพ็คเกจ readxl ในระหว่างบทช่วยสอนนี้

ใช้รหัส

readxl_example()

เพื่อดูสเปรดชีตที่มีอยู่ทั้งหมดในไลบรารี

Readxl_ตัวอย่าง

หากต้องการตรวจสอบตำแหน่งของสเปรดชีตชื่อ clippy.xls ให้ใช้งานง่าย

readxl_example("geometry.xls")

Readxl_ตัวอย่าง

หากคุณติดตั้ง R ด้วย conda สเปรดชีตจะอยู่ใน Anaconda3/lib/R/library/readxl/extdata/filename.xls

read_excel()

ฟังก์ชัน read_excel() มีประโยชน์อย่างมากเมื่อพูดถึงการเปิดส่วนขยาย xls และ xlsx

ไวยากรณ์คือ:

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

เราสามารถนำเข้าสเปรดชีตจากไลบรารี readxl และนับจำนวนคอลัมน์ในชีตแรก

# 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)

เอาท์พุต

## [1] 5

excel_sheets()

ไฟล์ datasets.xlsx ประกอบด้วย 4 แผ่นงาน เราสามารถค้นหาว่ามีแผ่นงานใดบ้างในสมุดงานโดยใช้ฟังก์ชัน excel_sheets()

example <- readxl_example("datasets.xlsx")

excel_sheets(example)

เอาท์พุต

[1] "iris"     "mtcars"   "chickwts" "quakes"

ถ้าแผ่นงานมีหลายแผ่นงาน เป็นเรื่องง่ายที่จะเลือกแผ่นงานใดแผ่นหนึ่งโดยใช้อาร์กิวเมนต์ของแผ่นงาน เราสามารถระบุชื่อของแผ่นงานหรือดัชนีแผ่นงานได้ เราสามารถตรวจสอบได้ว่าฟังก์ชันทั้งสองส่งคืนเอาต์พุตเดียวกันโดยมีค่าเหมือนกัน ()

example <- readxl_example("datasets.xlsx")
quake <- read_excel(example, sheet = "quakes")
quake_1 <-read_excel(example, sheet = 4)
identical(quake, quake_1)

เอาท์พุต

## [1] TRUE

เราสามารถควบคุมเซลล์ที่จะอ่านได้ 2 วิธี

  1. ใช้อาร์กิวเมนต์ n_max เพื่อส่งคืน n แถว
  2. ใช้อาร์กิวเมนต์ช่วงรวมกับ cell_rows หรือ cell_cols

ตัวอย่างเช่น เราตั้งค่า n_max เท่ากับ 5 เพื่อนำเข้าห้าแถวแรก

# Read the first five row: with header
iris <-read_excel(example, n_max =5, col_names =TRUE)

Excel_ชีต

หากเราเปลี่ยน col_names เป็น FALSE R จะสร้างส่วนหัวโดยอัตโนมัติ

# Read the first five row: without header
iris_no_header <-read_excel(example, n_max =5, col_names =FALSE)

iris_no_header

ในกรอบข้อมูล iris_no_header นั้น R ได้สร้างตัวแปรใหม่ 1 ตัวชื่อ X__2, X__3, X__4, X__5 และ X__XNUMX

Excel_ชีต

นอกจากนี้เรายังสามารถใช้ช่วงอาร์กิวเมนต์เพื่อเลือกแถวและคอลัมน์ในสเปรดชีตได้ ในโค้ดด้านล่าง เราใช้สไตล์ Excel เพื่อเลือกช่วง A1 ถึง B5

# Read rows A1 to B5
example_1 <-read_excel(example, range = "A1:B5", col_names =TRUE)
dim(example_1)

เอาท์พุต

## [1] 4 2

เราจะเห็นว่า example_1 ส่งคืน 4 แถวที่มี 2 คอลัมน์ ชุดข้อมูลมีส่วนหัว ซึ่งสาเหตุที่ทำให้มิติเป็น 4×2

Excel_ชีต

ในตัวอย่างที่สอง เราใช้ฟังก์ชัน cell_rows() ซึ่งควบคุมช่วงของแถวที่จะส่งคืน หากเราต้องการนำเข้าแถวที่ 1 ถึง 5 เราสามารถตั้งค่า cell_rows(1:5) ได้ โปรดทราบว่า cell_rows(1:5) ส่งคืนเอาต์พุตเดียวกันกับ 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)

เอาท์พุต

## [1] 4 5

อย่างไรก็ตาม example_2 เป็นเมทริกซ์ขนาด 4×5 ชุดข้อมูลม่านตามี 5 คอลัมน์พร้อมส่วนหัว เราส่งคืนสี่แถวแรกพร้อมส่วนหัวของคอลัมน์ทั้งหมด

Excel_ชีต

ในกรณีที่เราต้องการนำเข้าแถวที่ไม่ได้เริ่มต้นที่แถวแรก เราจะต้องรวม col_names = FALSE หากเราใช้ range = cell_rows(2:5) จะเห็นได้ชัดว่ากรอบข้อมูลของเราไม่มีส่วนหัวอีกต่อไป

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_ชีต

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)

เอาท์พุต

## [1] 150   2

หมายเหตุ: range = cell_cols(“A:B”) ส่งคืนเอาต์พุตเซลล์ทั้งหมดที่มีค่าที่ไม่ใช่ค่าว่าง ชุดข้อมูลประกอบด้วย 150 แถว ดังนั้น read_excel() จะส่งคืนแถวสูงสุด 150 แถว ซึ่งได้รับการยืนยันด้วยฟังก์ชัน dim()

read_excel() ส่งคืน NA เมื่อสัญลักษณ์ที่ไม่มีค่าตัวเลขปรากฏในเซลล์ เราสามารถนับจำนวนค่าที่หายไปได้ด้วยการรวมกันของสองฟังก์ชัน

  1. รวม
  2. is.na

นี่คือรหัส

iris_na <-read_excel(example, na ="setosa")
sum(is.na(iris_na))

เอาท์พุต

## [1] 50

เราขาดหายไป 50 ค่า ซึ่งเป็นแถวของสายพันธุ์เซโตซา

นำเข้าข้อมูลจากซอฟต์แวร์ทางสถิติอื่น ๆ

เราจะนำเข้าไฟล์รูปแบบต่างๆ ด้วยแพ็คเกจสวรรค์ รองรับแพ็คเกจนี้ SASซอฟต์แวร์ STATA และ SPSS เราสามารถใช้ฟังก์ชันต่อไปนี้เพื่อเปิดชุดข้อมูลประเภทต่างๆ ตามนามสกุลไฟล์:

  • SAS: read_sas()
  • STATA: read_dta() (หรือ read_stata() ซึ่งเหมือนกัน)
  • SPSS: read_sav() หรือ read_por() เราจำเป็นต้องตรวจสอบส่วนขยาย

จำเป็นต้องมีอาร์กิวเมนต์เดียวเท่านั้นภายในฟังก์ชันเหล่านี้ เราจำเป็นต้องทราบ PATH ที่เก็บไฟล์ไว้ เพียงเท่านี้เราก็พร้อมที่จะเปิดไฟล์ทั้งหมดจาก SAS, STATA และ SPSS แล้ว ฟังก์ชันทั้งสามนี้ยอมรับ URL เช่นกัน

library(haven)

เฮเวนมาพร้อมกับ conda r-essential มิฉะนั้นไปที่ ลิงค์ หรือในเทอร์มินัล conda install -c conda-forge r-haven

อ่านว่าสัส

สำหรับตัวอย่างของเรา เราจะใช้ชุดข้อมูลการรับเข้าจาก IDRE

PATH_sas <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sas7bdat?raw=true'
df <- read_sas(PATH_sas)
head(df)

เอาท์พุต

## # 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

อ่านสถานะ

สำหรับไฟล์ข้อมูล STATA คุณสามารถใช้ read_dta() เราใช้ชุดข้อมูลเดียวกันทุกประการ แต่จัดเก็บไว้ในไฟล์ .dta

PATH_stata <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.dta?raw=true'
df <- read_dta(PATH_stata)
head(df)

เอาท์พุต

## # 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

อ่าน SPSS

เราใช้ฟังก์ชัน read_sav() เพื่อเปิดไฟล์ SPSS นามสกุลไฟล์ “.sav”

PATH_spss <- 'https://github.com/guru99-edu/R-Programming/blob/master/binary.sav?raw=true'
df <- read_sav(PATH_spss)
head(df)

เอาท์พุต

## # 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

แนวทางปฏิบัติที่ดีที่สุดสำหรับการนำเข้าข้อมูล

เมื่อเราต้องการนำเข้าข้อมูลเข้าสู่ R การนำรายการตรวจสอบต่อไปนี้มาใช้จะมีประโยชน์ เพราะจะทำให้การนำเข้าข้อมูลเข้าสู่ R อย่างถูกต้องเป็นเรื่องง่าย:

  • รูปแบบทั่วไปของสเปรดชีตคือการใช้แถวแรกเป็นส่วนหัว (โดยปกติจะเป็นชื่อตัวแปร)
  • หลีกเลี่ยงการตั้งชื่อชุดข้อมูลที่มีช่องว่าง มันสามารถนำไปสู่การตีความเป็นตัวแปรที่แยกจากกัน หรือเลือกใช้ '_' หรือ '-'
  • ชื่อสั้นเป็นที่ต้องการ
  • อย่าใส่สัญลักษณ์ในชื่อ: เช่น: exchange_rate_$_€ ไม่ถูกต้อง ต้องการตั้งชื่อ: exchange_rate_dollar_euro
  • ใช้ NA สำหรับค่าที่หายไป มิฉะนั้น เราจะต้องทำความสะอาดรูปแบบในภายหลัง

สรุป

ตารางต่อไปนี้สรุปฟังก์ชันที่จะใช้ในการนำเข้าไฟล์ประเภทต่างๆ ใน ​​R คอลัมน์ที่หนึ่งระบุไลบรารีที่เกี่ยวข้องกับฟังก์ชัน คอลัมน์สุดท้ายอ้างถึงอาร์กิวเมนต์เริ่มต้น

ห้องสมุด วัตถุประสงค์ ฟังก์ชัน อาร์กิวเมนต์เริ่มต้น
utils อ่านไฟล์ CSV อ่าน.csv() ไฟล์, ส่วนหัว =, TRUE, sep = “,”
อ่านxl อ่านไฟล์ EXCEL read_excel() เส้นทาง, ช่วง = NULL, col_names = TRUE
ที่พัก อ่านไฟล์ SAS read_sas() เส้นทาง
ที่พัก อ่านไฟล์ STATA read_stata() เส้นทาง
ที่พัก อ่านไฟล์ SPSS read_sav() เส้นทาง

ตารางต่อไปนี้แสดงวิธีต่างๆ ในการนำเข้าการเลือกโดยใช้ฟังก์ชัน read_excel()

ฟังก์ชัน วัตถุประสงค์ ข้อโต้แย้ง
read_excel() อ่านจำนวนแถว n_สูงสุด = 10
เลือกแถวและคอลัมน์เช่นเดียวกับใน Excel พิสัย = “A1:D10”
เลือกแถวที่มีดัชนี ช่วง= cell_rows(1:3)
เลือกคอลัมน์ที่มีตัวอักษร ช่วง = cell_cols("A:C")