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

ข้อมูลอาจมีอยู่ในรูปแบบต่างๆ สำหรับแต่ละรูปแบบ 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_example("geometry.xls")
หากคุณติดตั้ง 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 วิธี
- ใช้อาร์กิวเมนต์ n_max เพื่อส่งคืน n แถว
- ใช้อาร์กิวเมนต์ช่วงรวมกับ cell_rows หรือ cell_cols
ตัวอย่างเช่น เราตั้งค่า n_max เท่ากับ 5 เพื่อนำเข้าห้าแถวแรก
# Read the first five row: with header iris <-read_excel(example, n_max =5, col_names =TRUE)
หากเราเปลี่ยน 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 เพื่อเลือกช่วง 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
ในตัวอย่างที่สอง เราใช้ฟังก์ชัน 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) จะถือว่าแถวแรกเป็นส่วนหัว ดังนั้นจึงมีการส่งคืนข้อมูลสี่แถวในทุกห้าคอลัมน์
ในกรณีที่เราต้องการนำเข้าแถวที่ไม่ได้เริ่มต้นที่แถวแรก เราจะต้องรวม 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:
# 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()`:
- รวม
- 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") |







