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

⚡ สรุปอย่างชาญฉลาด

การนำเข้าข้อมูลใน R ครอบคลุมการอ่านไฟล์ CSV ด้วย read.csv(), ไฟล์ Excel ด้วย readxl และไฟล์ SAS, STATA หรือ SPSS ด้วย haven คู่มือนี้ยังแสดงวิธีการเลือกชีต แถว และช่วงเซลล์อย่างแม่นยำในระหว่างการนำเข้าด้วย

  • 📄 การนำเข้า CSV: read.csv(file, header = TRUE, sep = “,”) โหลดไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคจากพาธในเครื่องหรือจากไฟล์อื่น URL.
  • ⚠️ การเปลี่ยนแปลงเวอร์ชัน: ตั้งแต่ R เวอร์ชัน 4.0.0 เป็นต้นไป คอลัมน์ประเภทอักขระจะยังคงเป็นอักขระ เนื่องจากค่าเริ่มต้นของ stringsAsFactors คือ FALSE
  • 📗 นำเข้าไฟล์ Excel: เมธอด read_excel() จาก readxl รองรับทั้งไฟล์ .xls และ .xlsx ส่วนเมธอด excel_sheets() จะแสดงรายการเวิร์กชีตทั้งหมดก่อน
  • 🎯 การคัดเลือกที่แม่นยำ: n_max จำกัดจำนวนแถว, range รับสัญลักษณ์แบบ Excel และ cell_rows() หรือ cell_cols() รับดัชนีและตัวอักษร
  • 🔄 ซอฟต์แวร์อื่นๆ: haven มีฟังก์ชัน read_sas(), read_dta() และ read_sav() ซึ่งแต่ละฟังก์ชันต้องการเพียงแค่พาธหรือ URL.
  • 🧹 อินพุตที่สะอาด: ก่อนนำเข้าข้อมูล ให้แปลงค่าที่หายไปเป็น NA และหลีกเลี่ยงการใช้ช่องว่างหรือสัญลักษณ์ในชื่อคอลัมน์

นำเข้าข้อมูลใน R

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

อ่านไฟล์ CSV

รูปแบบข้อมูลที่ใช้กันอย่างแพร่หลายที่สุดคือ .csv หรือค่าที่คั่นด้วยเครื่องหมายจุลภาค R จะโหลดไลบรารีต่างๆ ในระหว่างการเริ่มต้นระบบ รวมถึงแพ็กเกจ utils ด้วย แพ็กเกจนี้มีฟังก์ชัน read.csv() ซึ่งเป็นวิธีมาตรฐานในการเปิดไฟล์ 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)

Output:

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

Output:

## [1] "factor"

ใน R เวอร์ชันก่อน 4.0.0 เมธอด read.csv() จะแปลงคอลัมน์ประเภท character ทุกคอลัมน์ให้เป็น factor ซึ่งเป็นเหตุผลว่าทำไม class(df$X) จึงคืนค่าเป็น “factor” ในตัวอย่างข้างต้น คุณสามารถปิดการใช้งานได้โดยใช้ stringsAsFactors = FALSE

⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: ตั้งแต่ 4.0.0 R ค่าเริ่มต้นคือ stringsAsFactors = FALSE ดังนั้นคอลัมน์ประเภทตัวอักษรจะยังคงเป็นตัวอักษร และตัวอย่างแรกจะส่งคืนค่า “character” ในการติดตั้งเวอร์ชันใหม่ การส่งอาร์กิวเมนต์อย่างชัดเจนดังที่แสดงด้านล่าง จะให้ผลลัพธ์เดียวกันในทุกเวอร์ชัน และเป็นวิธีที่ปลอดภัยที่สุด

PATH <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/mtcars.csv'
df <-read.csv(PATH, header =TRUE, sep = ',', stringsAsFactors =FALSE)
class(df$X)

Output:

## [1] "character"

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

read.csv() กับ read_csv(): ควรใช้ตัวไหนดี?

ฟังก์ชัน `read.csv()` มีอยู่ใน R เวอร์ชันพื้นฐานและไม่จำเป็นต้องใช้แพ็กเกจเพิ่มเติม แต่แพ็กเกจ `readr` จะเพิ่มฟังก์ชัน `read_csv()` ซึ่งทำงานได้เร็วกว่าและตัดสินใจแทนผู้ใช้น้อยกว่า

หลักเกณฑ์ อ่านไฟล์ CSV() (ยูทิลิตี้) read_csv() (readr)
แพ็คเกจที่ต้องการ ไม่มี ผู้อ่าน
ความเร็วในการประมวลผลไฟล์ขนาดใหญ่ ช้าลง เร็วกว่าหลายเท่า
คืนสินค้า ข้อมูล.เฟรม ทิบเบิล
ชื่อคอลัมน์ ช่องว่างถูกแปลงเป็นจุด เก็บรักษาไว้ตามที่เขียนไว้ทุกประการ
การตรวจจับประเภท เงียบ รายงานในข้อกำหนดคอลัมน์
library(readr)
df <- read_csv(PATH)

# For very large files, data.table::fread() is faster still
library(data.table)
df <- fread(PATH)

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

อ่านไฟล์ Excel

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

ใช้รหัสนี้

require(readxl)

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

Output:

Loading required package: readxl.

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

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

library(readxl)

readxl_example()

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

ใช้รหัส

readxl_example()

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

Readxl_ตัวอย่าง

หากต้องการตรวจสอบตำแหน่งที่ตั้งของไฟล์สเปรดชีตเฉพาะ ให้ระบุชื่อไฟล์นั้น:

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)

Output:

## [1] 5

excel_sheets()

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

example <- readxl_example("datasets.xlsx")

excel_sheets(example)

Output:

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

Output:

## [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 โปรแกรม readxl ได้สร้างชื่อตัวยึดตำแหน่งขึ้นมาห้าชื่อ โดยเวอร์ชันเก่าจะสร้าง X__1 ถึง X__5 ในขณะที่เวอร์ชันปัจจุบันจะสร้าง …1 ถึง …5

Excel_ชีต

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

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

Output:

## [1] 4 2

example_1 ส่งคืน 4 แถวและ 2 คอลัมน์ ช่วง A1:B5 ครอบคลุมห้าแถวในสเปรดชีต แต่แถวแรกถูกใช้เป็นส่วนหัว ซึ่งเป็นเหตุผลว่าทำไมขนาดจึงเป็น 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)

Output:

## [1] 4 5

ในทางตรงกันข้าม example_2 มีขนาด 4 คูณ 5 cell_rows(1: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_ชีต

คุณสามารถเลือกคอลัมน์โดยใช้ตัวอักษรได้เช่นเดียวกับใน Excel:

# Select columns A and B
col <- read_excel(example, range = cell_cols("A:B"))
dim(col)

Output:

## [1] 150   2

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

อาร์กิวเมนต์ `na` บอกฟังก์ชัน `read_excel()` ว่าค่าใดบ้างที่ควรถือว่าเป็นค่าที่หายไป นับจำนวนค่าเหล่านั้นด้วยฟังก์ชัน `sum()` และ `is.na()`:

  1. รวม
  2. is.na

นี่คือรหัส

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

Output:

## [1] 50

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

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

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

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

แต่ละฟังก์ชันเหล่านี้ต้องการอาร์กิวเมนต์เพียงตัวเดียว คือ PATH ที่เก็บไฟล์ และแต่ละฟังก์ชันรับพารามิเตอร์เป็น URL สะดวกพอๆ กับเส้นทางท้องถิ่น

library(haven)

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

อ่านไฟล์ SAS

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

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

Output:

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

สำหรับไฟล์ข้อมูล 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)

Output:

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

Output:

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

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

การตรวจสอบตามรายการด้านล่างนี้ก่อนนำเข้าจะช่วยลดงานทำความสะอาดส่วนใหญ่ในภายหลังได้:

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

การนำเข้าข้อมูลใน R: คู่มืออ้างอิงฟังก์ชัน

ตารางด้านล่างแสดงรายการฟังก์ชันนำเข้าสำหรับไฟล์แต่ละประเภท ไลบรารีที่จัดหาฟังก์ชันนั้น และอาร์กิวเมนต์เริ่มต้น:

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

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

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

คำถามที่พบบ่อย

R เวอร์ชัน 4.0.0 เปลี่ยนค่าเริ่มต้นของ stringsAsFactors จาก TRUE เป็น FALSE คอลัมน์ประเภทอักขระจะยังคงเป็นอักขระต่อไป หากต้องการให้สคริปต์ทำงานเหมือนกันใน R เวอร์ชันเก่ากว่า ให้ระบุค่าอาร์กิวเมนต์นี้อย่างชัดเจน

แทนที่ URL โดยใส่พาธแบบเต็มในเครื่องหมายอัญประกาศ เช่น “C:/Users/name/data.csv” ใช้เครื่องหมายทับหรือเครื่องหมายแบ็กสแลชคู่ในการระบุตำแหน่ง Windowsและตรวจสอบไดเร็กทอรีปัจจุบันด้วยคำสั่ง getwd()

readxl อ่านไฟล์ .xls และ .xlsx ด้วยภาษา R บริสุทธิ์ โดยไม่มีส่วนเสริมใดๆ Java การพึ่งพา เฉพาะแพ็คเกจ xlsx รุ่นเก่าเท่านั้นที่ต้องการ Java ผ่านทาง rJavaซึ่งเป็นเหตุผลว่าทำไม readxl จึงเป็นตัวเลือกที่แนะนำ

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

ใช่แล้ว ผู้ช่วย AI สามารถวินิจฉัยตัวคั่นที่ไม่ถูกต้อง ปัญหาการเข้ารหัส และส่วนหัวที่อ่านผิดจากข้อความแสดงข้อผิดพลาดได้ โปรดตรวจสอบผลลัพธ์ด้วย str() หรือ glimpse() ก่อนดำเนินการวิเคราะห์ต่อเสมอ

สรุปโพสต์นี้ด้วย: