“Hỏi một câu, chỉ dốt chốc lát, không hỏi sẽ dốt cả đời.”
Chương này sẽ trình bày cách đọc dữ liệu (nhập dữ liệu vào R) từ các tập tin như excel, text (.txt), … và cách ghi ra tập tin để lưu trữ dữ liệu.
Một số tập dữ liệu được lữu trữ sẵn trong các gói của R để phục vụ
cho việc minh họa các hàm trong R. Chẳng hạn gói datasets
chứa nhiều tập dữ liệu khác nhau. Để xem thông tin các tập dữ liệu chứa
trong gói này chúng ta có thể dùng một trong hai lệnh sau:
data(package = "datasets") # cho thông tin về dữ liệu có trong gói datasets
library(help = "datasets") # cho thông tin về gói datasets và dữ liệu chứa trong đó
Để biết thông tin về một tập dữ liệu cụ thể trong đó ta dùng dấu
?.
?ChickWeight
Ta thấy ChickWeight là một data frame.
class(ChickWeight)
## [1] "nfnGroupedData" "nfGroupedData" "groupedData" "data.frame"
Ngoài cách trích xuất các thành phần của data frame như ở Chương 5,
chúng ta có hai hàm head() và tail() dùng để
trích phần đầu và phần cuối tương ứng của một đối tượng trong R.
head(ChickWeight) # mặc định là 6 dòng đầu
## weight Time Chick Diet
## 1 42 0 1 1
## 2 51 2 1 1
## 3 59 4 1 1
## 4 64 6 1 1
## 5 76 8 1 1
## 6 93 10 1 1
head(ChickWeight, n = 10) # chỉ rõ 10 dòng đầu
## weight Time Chick Diet
## 1 42 0 1 1
## 2 51 2 1 1
## 3 59 4 1 1
## 4 64 6 1 1
## 5 76 8 1 1
## 6 93 10 1 1
## 7 106 12 1 1
## 8 125 14 1 1
## 9 149 16 1 1
## 10 171 18 1 1
tail(ChickWeight)
## weight Time Chick Diet
## 573 155 12 50 4
## 574 175 14 50 4
## 575 205 16 50 4
## 576 234 18 50 4
## 577 264 20 50 4
## 578 264 21 50 4
tail(ChickWeight, n = 3)
## weight Time Chick Diet
## 576 234 18 50 4
## 577 264 20 50 4
## 578 264 21 50 4
Thêm một ví dụ về một gói khác có kèm theo một số tập dữ liệu trong
đó là tseries. Gói này không có sẵn trong R, do đó chúng ta
cần cài đặt và tải nó lên workspace.
install.packages("tseries")
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
Tương tự như trên, chúng ta dùng lệnh sau để biết thông tin về gói này và những tập dữ liệu có sẵn trong đó.
library(help="tseries")
Để sử dụng được một tập dữ liệu nào đó trong gói này chúng ta cần tải
dữ liệu đó lên bằng hàm data().
data(ice.river)
ice.river[1:5,]
## flow.vat flow.jok prec temp
## [1,] 16.1 30.2 8.1 0.9
## [2,] 19.2 29.0 4.4 1.6
## [3,] 14.5 28.4 7.0 0.1
## [4,] 11.0 27.8 0.0 0.6
## [5,] 13.6 27.8 0.0 2.0
Đầu tiên chúng ta sẽ đọc dữ liệu từ tập tin định dạng bảng
(table-format), tức là dạng tệp text có phần mở rộng là
.txt. Bấm vào đây tải tệp định dạng bảng chứa dữ liệu và
lưu ở một thư mục nào đó trong máy. Đây là dữ liệu về giải phẫu mèo nuôi
trong nhà. Dữ liệu là một data frame gồm 3 biến là Sex: giống (F: cái,
M: đực), Bwt: trọng lượng cơ thể (kg), Hwt: trọng lượng tim (g). Để đọc
dữ liệu từ tập tin txt chúng ta dùng hàm read.table(). Để
nhập dữ liệu vào R ta có một vài cách sau:
dframe <- read.table("cats.txt", header = T) # chọn header=TRUE nếu mỗi cột dữ liệu có tên (Sex,Bwt,Hwt).
head(dframe) # Xuất 6 dòng đầu
## Sex Bwt Hwt
## 1 F 2.0 7.0
## 2 F 2.0 7.4
## 3 F 2.0 9.5
## 4 F 2.1 7.2
## 5 F 2.1 7.3
## 6 F 2.1 7.6
dframe <- read.table("D:/Stats program/Stats Intro/Practice/cats.txt", header = T)
Lưu ý: Trong code R phải đổi dấu \
(backslash: xuyệc ngược) trong đường dẫn thành dấu /
(slash: xuyệc).
file.choose() để hiện thị cửa
sổ chọn tập tin:dframe <- read.table(file.choose(), header = T)
Bây giờ chúng ta sẽ đọc dữ liệu từ tập tin Excel. Bấm bào đây tải tập tin Excel chứa dữ liệu và lưu ở
một thư mục nào đó trong máy. Tập tin Excel có phần mở rộng là .xlsx. Do
đó để đọc dữ liệu từ tập tin Excel chúng ta cần đổi .xlsx sang .csv và
sau đó dùng hàm read.csv().
Cách đổi .xlsx sang .csv: Mở tập tin Excel chứa dữ liệu \(\rightarrow\) File \(\rightarrow\) Save as \(\rightarrow\) Save as type: CSV (Comma delimited).
dframe <- read.csv(file.choose(), header = T)
head(dframe)
## Sex Bwt Hwt
## 1 F 2.0 7.0
## 2 F 2.0 7.4
## 3 F 2.0 9.5
## 4 F 2.1 7.2
## 5 F 2.1 7.3
## 6 F 2.1 7.6
tail(dframe)
## Sex Bwt Hwt
## 139 M 3.6 15.0
## 140 M 3.7 11.0
## 141 M 3.8 14.8
## 142 M 3.8 16.8
## 143 M 3.9 14.4
## 144 M 3.9 20.5
Chúng ta có thể đọc dữ liệu từ tập tin được lưu trên web.
mydf <- read.csv("https://public.services.aad.gov.au/datasets/science/ASAC_2388/FishingGrounds.csv")
head(mydf)
## GroundNo GroundNo2 Fishing.Ground Area Location
## 1 0 1 Not Known HIMI New Ground
## 2 1 2 Colgate Valley MAC Colgate Valley
## 3 2 3 Aurora Trough MAC Aurora Trough
## 4 3 4 Grand Canyon MAC Grand Canyon
## 5 4 5 Grand Canyon Flat MAC Grand Canyon
## 6 5 6 Golden Track MAC Aurora Trough
Để xuất dữ liệu dạng data frame ra tập tin .txt và .csv ta dùng hàm
write.table() và write.csv() tương ứng. Ở đây
chúng ta phải tạo thư mục R trong ổ đĩa D để lưu tập tin.
write.table(dframe, file = "D:/R/mydata.txt", row.names = F, quote = F, sep = "\t")
write.csv(dframe, file = "D:/R/mydata.csv", row.names = F)
Lúc này, chúng ta vào thư mục R trong ổ đĩa D sẽ thấy hai tập tin mydata.txt và mydata.csv.
Đối với các đối tượng như list (danh sách) hay array (mảng) chúng ta
cần hàm dput() để ghi ra tập tin và hàm dget()
để đọc từ tập tin.
somelist <- list(
foo = c(5,2,45),
bar = matrix(data = c(T, T, F, F, F, F, T, F, T), nrow = 3, ncol = 3),
baz = factor(c(1, 2, 2, 3, 1, 1, 3), levels = 1:3, ordered = T)
)
somelist
## $foo
## [1] 5 2 45
##
## $bar
## [,1] [,2] [,3]
## [1,] TRUE FALSE TRUE
## [2,] TRUE FALSE FALSE
## [3,] FALSE FALSE TRUE
##
## $baz
## [1] 1 2 2 3 1 1 3
## Levels: 1 < 2 < 3
dput(somelist, "D:/R/myRobject.txt")
Kiểm tra thư mục R trong ổ đĩa D chúng ta sẽ thấy tập tin
myRobject.txt. Bây giờ chúng ta dùng hàm dget() để
đọc dữ liệu từ tập tin này.
newobject <- dget("D:/R/myRobject.txt")
newobject
## $foo
## [1] 5 2 45
##
## $bar
## [,1] [,2] [,3]
## [1,] TRUE FALSE TRUE
## [2,] TRUE FALSE FALSE
## [3,] FALSE FALSE TRUE
##
## $baz
## [1] 1 2 2 3 1 1 3
## Levels: 1 < 2 < 3
Bài tập 8.1.
datasets có tập dữ liệu
quakes. Hãy mở cửa sổ chứa thông tin về tập dữ liệu này để
biết thêm thông tin. Sau đó hãy thực hiện các yêu cầu sau:
mag lớn hơn hoặc bằng 5 và ghi
dữ liệu này ra tập tin định dạng bảng (file txt) đặt tên là
q5.txt và lưu ở một thư mục nào đó.q5.dframe.car có data frame tên là
Duncan. Hãy cài gói car, truy cập dữ liệu
Duncan và hiện thị cửa sổ thông tin về dữ liệu này.exer chứa 3 tập dữ liệu:
quakes, q5.dframe và Duncan. Sau
đó hãy thực hiện các yêu cầu sau:
Exercise8-1.txt. Từ tệp vừa ghi hãy mở xem thông tin bên
trong.Exercise8-1.txt và đặt tên là
list.of.dataframes. Kiểm tra xem
list.of.dataframes có chứa đúng 3 đối tượng được ghi.| Hàm/Toán tử | Ý nghĩa |
|---|---|
data()
|
Tải dữ liệu từ các gói |
head()
|
Trích phần đầu của một đối tượng |
tail()
|
Trích phần cuối của một đối tượng |
read.table()
|
Nhập dữ liệu từ tệp định dạng bảng |
read.csv()
|
Nhập dữ liệu từ tệp Excel với phần mở rộng là .csv
|
write.table()
|
Ghi dữ liệu ra tệp định dạng bảng |
write.csv()
|
Ghi dữ liệu ra tệp Excel (.csv) |
dput()
|
Ghi đối tượng trong R ra tập tin |
dget()
|
Nhập đối tượng từ tập tin |