Tác giả: Nguyen Hai Truong | 2019-04-25
Trong quá trình phân tích dữ liệu, chúng ta có thể phải xử lý những dữ liệu rất lớn lên đến hàng chục triệu dòng (quan sát) hoặc hàng trăm cột (biến).
Trong bài viết này, Ranalytics
sẽ hướng dẫn các bạn cách chọn và sửa tên biến nhanh đối với trường hợp dữ liệu lớn nói trên bằng việc sử dụng các hàm select_all
, select_if
, select_at
, rename_all
, rename_if
, rename_at
.
Sử dụng dữ liệu iris
có sẵn trong R
.
library(dplyr)
iris %>% head
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Về bản chất, hàm select()
dùng để chọn biến, còn hàm rename()
dùng để sửa/thay đổi tên biến.
Do vậy, về cơ bản nhóm hàm select_all
, select_if
, select_at
sẽ khác nhóm hàm rename_all
, rename_if
, rename_at
ở điểm: Nhóm hàm select_*
sẽ bỏ đi những biến mà ko được chọn trong khi nhóm hàm rename_*
vẫn giữ những biến đó lại và chỉ sửa tên những biến cần sửa.
select_all & rename_all
# Chọn tất cả các biến, sau đó lower tên biến
select_all(iris, tolower) %>% head
## sepal.length sepal.width petal.length petal.width species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
# Sửa tên tất cả các biến thành chữ viết thường
rename_all(iris, tolower) %>% head
## sepal.length sepal.width petal.length petal.width species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
select_all
và rename_all
cho ra kết quả giống nhau vì áp dụng đối với tất cả các biến trong dữ liệu.
select_if & rename_if
# Chỉ chọn ra những biến là số (numeric), sau đó lower tên biến
select_if(iris, is.numeric, tolower) %>% head
## sepal.length sepal.width petal.length petal.width
## 1 5.1 3.5 1.4 0.2
## 2 4.9 3.0 1.4 0.2
## 3 4.7 3.2 1.3 0.2
## 4 4.6 3.1 1.5 0.2
## 5 5.0 3.6 1.4 0.2
## 6 5.4 3.9 1.7 0.4
# Sửa tên biến của những biến là số thành chữ viết thường,
# còn những biến khác vẫn giữ nguyên tên
rename_if(iris, is.numeric, tolower) %>% head
## sepal.length sepal.width petal.length petal.width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Trong trường hợp này, chúng ta đã thấy có sự khác biệt trong kết quả của 2 câu lệnh trên.
select_if
: Chỉ lấy ra 4 biến là biến số, sau đó lower tên biến (không lấy biếnSpecies
)rename_if
: Vẫn hiển thị tất cả các biến, nhưng chỉ sửa tên của 4 biến là biến số, còn biếnSpecies
không sửa
select_at & rename_at
# Chỉ chọn ra những biến chứa ký tự `Sepal`, sau đó tolower tên biến
select_at(iris,
vars(contains("Sepal")), # biến chứa ký tự `Sepal`
tolower
) %>%
head
## sepal.length sepal.width
## 1 5.1 3.5
## 2 4.9 3.0
## 3 4.7 3.2
## 4 4.6 3.1
## 5 5.0 3.6
## 6 5.4 3.9
# Sửa tên của những biến chứa ký tự `Sepal` thành chữ viết thường,
# còn những biến khác vẫn giữ nguyên tên
rename_at(iris,
vars(contains("Sepal")),
tolower
) %>%
head
## sepal.length sepal.width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Tương tự như trường hợp trước, trường hợp này kết quả trả ra cũng có sự khác biệt giữa 2 câu lệnh:
select_at
: Chỉ lấy ra 2 biến có chứa ký tựSepal
, sau đó lower tên biếnrename_at
: Vẫn hiển thị tất cả các biến, nhưng chỉ sửa tên của 2 biến chứa ký tựSepal
, còn các biến còn lại không sửa tên
Như vậy, chúng ta đã vừa được học cách chọn và sửa tên biến nhanh bằng việc sử dụng nhóm hàm select_all
, select_if
, select_at
và nhóm hàm rename_all
, rename_if
, rename_at
trong dplyr
.
Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn
!