6  การนำเข้า/ส่งออกไฟล์ในอาร์ (Import/Export file in R)

ในการทำงานจริงนั้น ข้อมูลส่วนใหญ่ที่ได้จะถูกเก็บไว้ไฟล์สกุลต่างๆ ที่เป็นรู้จักกันอย่างดี เช่นไฟล์นามสกุล txt csv xls หรือ xlsx หรือจะนำไฟล์ข้อมูลจากโปรแกรมสถิติอื่นๆ เช่นไฟล์ข้อมูลจากโปรแกรม SPSS หรือ STATA เป็นต้น โดยเนื้อหาของบทนี้ จะเป็นการนำเข้าข้อมูลและส่งออกข้อมูลเป็นไฟล์นามสกุล txt xls และ xlsx เท่านั้น

คำแนะนำ

ในการศึกษาบทเรียนนี้ เพื่อให้ง่ายต่อการใช้งาน ควรนำไฟล์ข้อมูล txt xls และ xlsx อยู่รวมในโฟลเดอร์เดี่ยวกับไฟล์ Rmd ที่กำลังใช้งานอยู่

และไฟล์ที่ใช้งานจะต้องอยู่ในรูปแบบของตาราง โดยที่แถวแรกต้องเป็นชื่อตัวแปร และแถวต่อๆไป จะเป็นข้อมูลที่บันทึกไว้ โดยในแถวที่ 2 ถึงแถวสุดท้ายหมายถึงข้อมูลตัวอย่างที่ 1 จนตัวอย่างสุดท้าย

6.1 คำสั่ง list.file( )

เป็นคำสั่งที่ตรวจสอบในโฟลเดอร์ที่เราใช้งานอยู่มีไฟล์ อะไรอยู่บ้างที่สามารถ เรียกขึ้นมาใช้งานโดยคำสั่งโดยย่อ

list.files( )
 [1] "cars.csv"               "cars.txt"               "cars.xls"              
 [4] "cars.xlsx"              "chapter_6_files"        "chapter_6.qmd"         
 [7] "chapter_6.rmarkdown"    "csv.png"                "diamonds.datasets.xlsx"
[10] "file_internet.txt"      "menu.png"               "readxl.png"            
[13] "text.png"               "xlsx.png"              

เพื่อการใช้การนำเข้าไฟล์ txt xls และ xlsx เป็นโดยง่าย จะพูดถึงการเก็บข้อมูลในรูปของ txt xls และ xlsx ก่อน และข้อมูลที่บันทึกทั้งหมดจะเป็นโครงสร้างข้อมูลแบบกรอบข้อมูลเท่านั้น

6.2 การบันทึกกรอบข้อมูลในรูปของไฟล์ txt

ถ้าต้องการนำข้อมูล cars บันทึกเป็นไฟล์ txt ขื่อ \("\)cars.txt\("\) สามารถทำได้โดยคำสั่ง write.table( )

write.table(x = cars, file ="cars.txt")

ไฟล์จะถูกบันทึกลงในโฟลเดอร์เดียวกับไฟล์ Rmd ที่ใช้ทำงานอยู่ ถ้าเป็นการเขียนในรูปไฟล์ .R ถ้าอยากรู้ไฟล์ txt ที่บันทึกถูกเก็บอยู่ที่ไหน ให้ใช้คำสั่ง getwd( )

getwd( )
[1] "/Users/somsak_mac2/Documents/R/DataVizWithR/DATA Viz/chapter6"

6.3 การนำเข้าข้อมูลไฟล์ txt

เราสามารถนำเข้าไฟล์ข้อมูล txt โดยใช้คำสั่ง read.table( ) ถ้าไฟล์ txt อยู่ในโฟลเดอร์ เดียวกับไฟล์ Rmd คำสั่งที่ใช้ จะสั้นลง เช่นเดียวกับคำสั่ง write.table( )

กำหนดชื่ตัวแปร cars.txt เป็นตัวแปรที่ได้ค่ามาจากไฟล์ txt

cars.txt <- read.table(file = "cars.txt", header = TRUE)
str(cars.txt)
'data.frame':   50 obs. of  2 variables:
 $ speed: int  4 4 7 7 8 9 10 10 10 11 ...
 $ dist : int  2 10 4 22 16 10 18 26 34 17 ...

6.4 การนำเข้าไฟล์ txt (import txt file)

# check file in working directory
list.files( )
 [1] "cars.csv"               "cars.txt"               "cars.xls"              
 [4] "cars.xlsx"              "chapter_6_files"        "chapter_6.qmd"         
 [7] "chapter_6.rmarkdown"    "csv.png"                "diamonds.datasets.xlsx"
[10] "file_internet.txt"      "menu.png"               "readxl.png"            
[13] "text.png"               "xlsx.png"              
data <- read.table(file = "cars.txt")
str(data)
'data.frame':   50 obs. of  2 variables:
 $ speed: int  4 4 7 7 8 9 10 10 10 11 ...
 $ dist : int  2 10 4 22 16 10 18 26 34 17 ...

ตัวอย่างการอ่านไฟล์ข้อมูล txt จากอินเทอร์เน๊ตที่เป็นไฟล์ txt

http://www.sthda.com/upload/boxplot_format.txt

url <- "http://www.sthda.com/upload/boxplot_format.txt"
data2 <- read.table(file = url, header = TRUE)
head(data2)
   Nom variable Group
1 IND1       10     A
2 IND2        7     A
3 IND3       20     A
4 IND4       14     A
5 IND5       14     A
6 IND6       12     A

การนำเข้าไฟล์จากอินเทอร์เน๊ต คือการนำไฟล์เข้ามาใช้เครื่องโดยเก็บไว้หน่อยความจำของภาษาอาร์ โดยไม่มีบันทึกข้อมูลลงเครื่องคอมพิวเตอร์ของเรา และจะต้องทำการเรียกไฟล์ข้องมูลจากเวบไซต์ต้นทางทุกครั้งที่เปิดใช้ไฟล์ Rmd แต่ถ้าต้องการดาวน์โหลดไฟล์มาเก็บไว้ในเครื่องสามารถทำได้โดยใช้คำสั่ง download.file( ) และสามารถตั้งชื่อให้ใหม่ได้ตามต้องการ

download.file(url, destfile = "file_internet.txt")
list.files( )
 [1] "cars.csv"               "cars.txt"               "cars.xls"              
 [4] "cars.xlsx"              "chapter_6_files"        "chapter_6.qmd"         
 [7] "chapter_6.rmarkdown"    "csv.png"                "diamonds.datasets.xlsx"
[10] "file_internet.txt"      "menu.png"               "readxl.png"            
[13] "text.png"               "xlsx.png"              

6.5 การบันทึกกรอบข้อมูลเป็นไฟล์ csv (comma-separated values)

csv เป็นไฟล์ข้อมูลอีกชนิดที่ได้รับความนิยม ที่ทำงานบน excel ปัญหาสำหรับผู้ใช้อาร์มือใหม่ส่วนใหญ่ที่เจอก็คือ การนำข้อมูลไปจัดการด้วยโปรแกรมเอกสารเช่น excel เพราะคิดว่าจะความง่ายกว่า แล้วจึงค่อยนำเข้าสู่โปรแกรมอาร์อีกครั้ง

จากกรอบข้อมูลที่มี คำสั่งที่ใช้ คือ write.csv( )

write.csv(x = cars, file = "cars.csv", row.names = FALSE)
list.files( )
 [1] "cars.csv"               "cars.txt"               "cars.xls"              
 [4] "cars.xlsx"              "chapter_6_files"        "chapter_6.qmd"         
 [7] "chapter_6.rmarkdown"    "csv.png"                "diamonds.datasets.xlsx"
[10] "file_internet.txt"      "menu.png"               "readxl.png"            
[13] "text.png"               "xlsx.png"              

6.6 การนำเข้าไฟล์ csv

ก็สามารถทำได้โดยใช้คำสั่ง read.csv( )

cars.csv <- read.csv(file = "cars.csv")
str(cars.csv)
'data.frame':   50 obs. of  2 variables:
 $ speed: int  4 4 7 7 8 9 10 10 10 11 ...
 $ dist : int  2 10 4 22 16 10 18 26 34 17 ...

6.7 การบันทึกกรอบข้อมูลด้วยไฟล์ xlsx

โลโก้ชุดคำสั่ง readxl

โลโก้ชุดคำสั่ง readxl

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

install.packages("writexl")
install.packages("readxl")

หลังจากนั้นก็สามารถเรียกใช้งานชุดคำสั่งนี้ด้วย

library(writexl)
library(readxl)

6.8 การบันทึกกรอบข้อมูลด้วยไฟล์ xlsx

ในปัจจุบันไฟล์จากการ excel ส่วนใหม่จะเป็น xlsx แทบทั้งหมด คำสั่งสำหรับนำกรอบข้อมูลบันทึกเป็นไฟล์ xlsx คือ write_xlsx( )

write_xlsx(x = cars, path = "cars.xlsx")

ตรวจสอบ

list.files( )
 [1] "cars.csv"               "cars.txt"               "cars.xls"              
 [4] "cars.xlsx"              "chapter_6_files"        "chapter_6.qmd"         
 [7] "chapter_6.rmarkdown"    "csv.png"                "diamonds.datasets.xlsx"
[10] "file_internet.txt"      "menu.png"               "readxl.png"            
[13] "text.png"               "xlsx.png"              

และอ่านไฟล์ xlsx ที่อยู่รูปของตารางเหมือนกับไฟล์ csv คือ คำสั่ง read_xlsx( )

read_xlsx(path = "cars.xlsx")
# A tibble: 50 × 2
   speed  dist
   <dbl> <dbl>
 1     4     2
 2     4    10
 3     7     4
 4     7    22
 5     8    16
 6     9    10
 7    10    18
 8    10    26
 9    10    34
10    11    17
# ℹ 40 more rows

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

6.9 เมนูสำหรับการไฟล์ txt csv และ xlsx ใน RStudio

ใน RStudio มีเมนูที่ช่วยให้การนำเข้าไฟล์มีสะดวกมากขึ้นสามารถเลือกได้จากเมนู Import Dataset

สำหรับไฟล์ txt ให้เลือก From Text(base) csv ให้เลือก From Text(readr) ส่วยไฟล์ xlsx ให้เลือก From Excel

สำหรับไฟล์ txt ให้เลือก From Text(base) csv ให้เลือก From Text(readr) ส่วยไฟล์ xlsx ให้เลือก From Excel

ถ้าเลือกจากไฟล์ cars.txt จากเมนู From Text(base) จะได้ในรูปที่ 6.3

GUI สำหรับไฟล์ txt

GUI สำหรับไฟล์ txt

ถ้าเลือกจากไฟล์ cars.csv จากเมนู From Text(readr) จะได้ในรูปที่ 6.4

GUI สำหรับไฟล์ csv

GUI สำหรับไฟล์ csv

ถ้าเลือกจากไฟล์ cars.xlsx จากเมนู From Excel จะได้ในรูปที่ 6.5

GUI สำหรับไฟล์ xlsx

GUI สำหรับไฟล์ xlsx
หมายเหตุ

ถ้านำไฟล์ csv และ xlsx เข้าด้วย GUI สามารถคัดลอกโค้ดอาร์ เพื่อไปวางใน Rmd ได้

คำสั่ง Views( ) คือคำสั่งที่จะเห็นข้อมูลที่นำเข้าในรูปแบบตาราง โดยปกติควรลบคำสั่งนี้ทิ้งไป เพราะเมื่อใช้ R Markdown ไม่จำเป็นต้องคัดลอกคำสั่งจาก GUI มาทั้งหมด

ในการศึกษาขึ้นสูงต่อ ผู้อ่านควรต้องการศึกษาการนำเข้าข้อมูลจากฐานข้อมูล เช่นฐานข้อมูลแบบ SQL หรือข้อมูลจากเวบไซต์ประเภทไฟล์สกุล JSON (.json) เป็นต้น