นำเข้าข้อมูลใน 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()
เพื่อดูสเปรดชีตที่มีอยู่ทั้งหมดในไลบรารี
หากต้องการตรวจสอบตำแหน่งของสเปรดชีตชื่อ clippy.xls ให้ใช้งานง่าย
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)
เอาท์พุต
## [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 วิธี
- ใช้อาร์กิวเมนต์ 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 นั้น R ได้สร้างตัวแปรใหม่ 1 ตัวชื่อ X__2, X__3, X__4, X__5 และ X__XNUMX
นอกจากนี้เรายังสามารถใช้ช่วงอาร์กิวเมนต์เพื่อเลือกแถวและคอลัมน์ในสเปรดชีตได้ ในโค้ดด้านล่าง เราใช้สไตล์ 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
ในตัวอย่างที่สอง เราใช้ฟังก์ชัน 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 คอลัมน์พร้อมส่วนหัว เราส่งคืนสี่แถวแรกพร้อมส่วนหัวของคอลัมน์ทั้งหมด
ในกรณีที่เราต้องการนำเข้าแถวที่ไม่ได้เริ่มต้นที่แถวแรก เราจะต้องรวม 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)
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 เมื่อสัญลักษณ์ที่ไม่มีค่าตัวเลขปรากฏในเซลล์ เราสามารถนับจำนวนค่าที่หายไปได้ด้วยการรวมกันของสองฟังก์ชัน
- รวม
- 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") |