Trong quá trình phân tích dữ liệu, sẽ có lúc chúng ta muốn nhìn dữ
liệu theo các chiều khác nhau. Trong bài viết này, mình sẽ hướng dẫn các
bạn cách tách và gộp biến theo cách mà chúng ta mong muốn bằng việc sử
dụng hàm separate() và unite() trong package
tidyverse.
Sử dụng dữ liệu giả lập, bao gồm thông tin ngày sinh và địa chỉ sinh sống của 3 học sinh cấp 3 sau đây:
data1 <- data.frame(
student = c("Viet", "Nam", "Quoc"),
dob = as.Date(c("1990-05-06", "1992-12-01", "1989-03-05")),
address = c("Trung Phung, Dong Da, Ha Noi", "Khoi Nghia, Tien Lang, Hai Phong", "Ngoc Son, Hiep Hoa, Bac Giang")
)
data1## student dob address
## 1 Viet 1990-05-06 Trung Phung, Dong Da, Ha Noi
## 2 Nam 1992-12-01 Khoi Nghia, Tien Lang, Hai Phong
## 3 Quoc 1989-03-05 Ngoc Son, Hiep Hoa, Bac Giang
Bây giờ chúng ta muốn tách biến dob (ngày sinh) thành
các biến ngày, tháng, năm sinh, và đồng thời tách biến
address thành các biến phường/xã, quận/huyện, tỉnh/TP.
Chúng ta sẽ sử dụng hàm separate()
library(tidyverse)
data2 <- data1 %>%
separate(dob, # tách biến `dob` thành 3 biến `year`, `month`, `day`
into = c("year", "month", "day"),
sep = "-" # ngăn cách bằng ký tự `-`
) %>%
separate(address, # tách biến `address` thành 3 biến `commune`, `district`, `city`
into = c("commune", "district", "city"),
sep = "," # ngăn cách bằng ký tự `,`
)
data2## student year month day commune district city
## 1 Viet 1990 05 06 Trung Phung Dong Da Ha Noi
## 2 Nam 1992 12 01 Khoi Nghia Tien Lang Hai Phong
## 3 Quoc 1989 03 05 Ngoc Son Hiep Hoa Bac Giang
Uniting là quá trình ngược lại với Separating
Cấu trúc hàm unite() như sau:
data2 %>%
# Gộp các biến `year`, `month`, `day` thành 1 biến `ymd`
unite(ymd, # tên biến mới
year, month, day, # 3 biến muốn gộp
sep = "-" # ngăn cách bằng dấu "-"
) %>%
# Gộp các biến `commune`, `district`, `city` thành 1 biến `province`
unite(province,
commune, district, city,
sep = ","
)## student ymd province
## 1 Viet 1990-05-06 Trung Phung, Dong Da, Ha Noi
## 2 Nam 1992-12-01 Khoi Nghia, Tien Lang, Hai Phong
## 3 Quoc 1989-03-05 Ngoc Son, Hiep Hoa, Bac Giang
Như vậy, mình vừa chia sẻ với các bạn cách tách và gộp biến theo cách
mà chúng ta mong muốn bằng việc sử dụng hàm separate() và
unite() trong package tidyverse.
Chúc các bạn học tập và làm việc hiệu quả!