R-008 data.frame trong R
Nội dung bài viết
data.frame
là một những kiểu dữ liệu cơ bản của R.
Để hiểu rõ data.frame
của R các bạn có thể đọc tài liệu chi tiết về data.frame bằng lệnh:
?data.frame
1. Tạo một data.frame:
DataFrame (tương tự như một bảng tính Excel hay DataFrame Pandas trong Python) trong R có thể tạo với hàm data.frame(...)
. Về cơ bản thì data.frame
giống matrix
chỉ có khác là các cột của data.frame
có thể khác kiểu dữ liệu. Tạo data.frame
từ các vector
thì mặc định các cột sẽ lấy tên biến của vector
:
book <- c("Xac suat thong ke", "Nhap mon lap trinh", "Phai trai dung sai")
year <- c(2015,2014,2017)
df <- data.frame(book, year)
df
book year
1 Xac suat thong ke 2015
2 Nhap mon lap trinh 2014
3 Phai trai dung sai 2017
2. Truy cập thành phần trong data.frame
Tương tự như list
bạn có thể truy cập các thành phần trong data.frame
qua toán tử [[...]]
và ...$key
:
Dùng [[...]]
cho data.frame
df[[2]]
[1] 2015 2014 2017
Hoặc dùng ...$key
df$book
[1] Xac suat thong ke Nhap mon lap trinh Phai trai dung sai
Levels: Nhap mon lap trinh Phai trai dung sai Xac suat thong ke
Tương tự như matrix
bạn có thể rút rows
và cols
của data.frame
bằng [vec.row, vec.col]
như sau:
df[1:2,1:2]
book year
1 Xac suat thong ke 2015
2 Nhap mon lap trinh 2014
3. Tải data.frame lên từ tập tin
R hổ trợ một số lệnh để tải một số tập tin bảng tính lên thành data.frame
. Để đọc tập tin csv
bạn có thể dùng hàm read.csv(...)
, lưu ý là cần xem working directory
trong R trước đang ở thư mục nào, việc chỉnh lại thư mục đang làm việc có thể sử dụng RStudio qua Session -> Set Working Directory -> Choose Directory
(hoặc tổ hợp phím Ctrl
+ Shift
+ H
). Bạn có thể xem nhanh thư mục hiện tại mình đang làm việc bằng lệnh:
getwd()
[1] "C:/Users/quangtiencs/Documents"
Thường thì phiên làm việc mặc định ở thư mục Documents
.
Đọc tập tin .csv
thành data.frame
:
my.df <- read.csv("ten cua file.csv")
4. Gộp hàng và cột
Tương tự matrix
, chúng ta có thể gộp hàng và cột của data.frame
bằng hàm rbind(...)
và cbind(...)
như sau:
df1 <- data.frame(a=1:2, b=4:5)
df2 <- data.frame(a=7:9,b=15:17)
df3 <- data.frame(c=9:10, d=11:12)
Với rbind(...)
gộp theo hàng:
rbind(df1, df2)
a b
1 1 4
2 2 5
3 7 15
4 8 16
5 9 17
Với cbind(...)
gộp theo cột:
cbind(df1, df3)
a b c d
1 1 4 9 11
2 2 5 10 12
5. Join hai data.frame
Trong các cơ sở dữ liệu quan hệ, một trong những toán tử quan trọng nhất là toán tử join
để gộp hai bảng dữ liệu dựa trên những giá trị giống nhau của các biến.
R cung cấp một hàm rất hữu ích là hàm merge(...)
hàm này cho phép join
hai data.frame
. Mặc định nếu không nói gì thêm thì phép join
được sử dụng là inner join
.
Xét hai bảng dữ liệu data.frame
sau đây:
data <- data.frame(so.luong=1:3, ma.hang=c('A','D','Z'))
data.lookup <- data.frame(ma.hang=c('A', 'B', 'C', 'D'), gia.thanh=12:15)
data
data.lookup
# Bảng dữ liệu data
so.luong ma.hang
1 1 A
2 2 D
3 3 Z
# Bảng dữ liệu data.lookup
ma.hang gia.thanh
1 A 12
2 B 13
3 C 14
4 D 15
Xem sơ qua dữ liệu thì chúng ta thấy ở bảng dữ liệu đầu có mã hàng Z mà bảng dữ liệu giá thành thì lại không có. Vì mặc định là inner join
nên sau khi join
thì hàng Z sẽ biến mất:
merge(data, data.lookup)
ma.hang so.luong gia.thanh
1 A 1 12
2 D 2 15