Trong quá trình phân tích dữ liệu sẽ có thể phát sinh việc chúng ta
muốn summarise nhiều biến cùng lúc trong tập dữ liệu. Trong bài viết
này, mình sẽ hướng dẫn các bạn cách sử dụng nhóm hàm
summarise_if(), summarise_at(),
summarise_all() để xử lý vấn đề trên.
Về cơ bản, nhóm hàm trên sử dụng khi chúng ta muốn summarise nhiều biến cùng lúc, còn sự khác biệt của nhóm hàm trên là:
summarise_all(): áp dụng đối với tất cả các biến
trong tập dữ liệu
summarise_at(): chỉ áp dụng đối với những biến nhất
định mà chúng ta chỉ định
summarise_if(): chỉ áp dụng đối với những biến thỏa
mãn những điều kiện mà chúng ta đã đặt ra
Sử dụng dữ liệu iris có sẵn trong R. Dữ
liệu bao gồm những thông số (đơn vị: cm) về chiều dài/rộng cánh hoa và
đài hoa của 3 loài hoa: setosa, versicolor,
virginica (150 quan sát).
# Package sử dụng
library(dplyr)
library(knitr)
# Summary dữ liệu
iris %>% summary## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
# 6 quan sát đầu tiên của tập dữ liệu
iris %>%
head %>%
kable()| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa |
Giả sử chúng ta muốn xem trung bình chiều dài, rộng cánh hoa và đài
hoa của từng loài hoa: setosa, versicolor, virginica -> dùng
summarise_all().
iris %>%
group_by(Species) %>%
summarise_all(funs(average = mean) # average - đuôi tên của những biến mới, mean - hàm tính trung bình
) %>%
kable()| Species | Sepal.Length_average | Sepal.Width_average | Petal.Length_average | Petal.Width_average |
|---|---|---|---|---|
| setosa | 5.006 | 3.428 | 1.462 | 0.246 |
| versicolor | 5.936 | 2.770 | 4.260 | 1.326 |
| virginica | 6.588 | 2.974 | 5.552 | 2.026 |
Nếu chúng ta chỉ muốn xem trung bình chiều dài, rộng của đài hoa của
từng loài hoa -> sử dụng summarise_at().
iris %>%
group_by(Species) %>%
summarise_at(c("Sepal.Length", "Sepal.Width"), # chỉ áp dụng với 2 này
funs(average = mean) # average - đuôi tên của những biến mới, mean - hàm tính trung bình
) %>%
kable()| Species | Sepal.Length_average | Sepal.Width_average |
|---|---|---|
| setosa | 5.006 | 3.428 |
| versicolor | 5.936 | 2.770 |
| virginica | 6.588 | 2.974 |
Còn trong trường hợp, chúng ta muốn summarise chỉ số mean của những
biến số (numeric) -> dùng summarise_if().
iris %>%
group_by(Species) %>%
summarise_if(is.numeric, # chỉ áp dụng đối với những biến numeric
funs(average = mean) # average - đuôi tên của những biến mới, mean - hàm tính trung bình
) %>%
kable()| Species | Sepal.Length_average | Sepal.Width_average | Petal.Length_average | Petal.Width_average |
|---|---|---|---|---|
| setosa | 5.006 | 3.428 | 1.462 | 0.246 |
| versicolor | 5.936 | 2.770 | 4.260 | 1.326 |
| virginica | 6.588 | 2.974 | 5.552 | 2.026 |
Như vậy, mình vừa chia sẻ với các bạn cách summarise nhiều biến cùng
1 lúc bằng việc sử dụng nhóm hàm summarise_if(),
summarise_at(), summarise_all().
Chúc các bạn học tập và làm việc hiệu quả!