Tổng hợp nhiều biến với hàm summarise

Tác giả: Nguyễn Hải Trường | 2019-03-25

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, Ranalytics 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(list(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
               list(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
               list(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, chúng ta đã vừa được học 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() trong dplyr. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn!

comments powered by Disqus