Tác giả: Nguyen Hai Truong | 2019-05-15
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, Ranalytics
sẽ hướng dẫn các bạn cách tổ chức dữ liệu theo cách mà chúng ta mong muốn bằng việc sử dụng hàm gather()
và spread()
trong package tidyverse
.
gather
Sử dụng dữ liệu giả định, bao gồm tổng điểm thi cuối năm 5 môn: Toán, Lý, Hóa, Anh, Văn của 3 bạn học sinh cấp 3 vào năm 2017, 2018.
library(tibble)
table1 <- tibble(
student = c("Viet", "Nam", "Quoc"),
`2017` = c(37.5, 40, 45),
`2018` = c(40, 40, 42.5)
)
table1
## # A tibble: 3 x 3
## student `2017` `2018`
## <chr> <dbl> <dbl>
## 1 Viet 37.5 40
## 2 Nam 40 40
## 3 Quoc 45 42.5
Giả sử bây giờ chúng ta muốn tổ chức dữ liệu theo một cách khác.
Chúng ta sẽ nhóm 2 biến 2017
và 2018
thành giá trị của biến mới, sẽ đặt tên là year
, còn biến chứa những giá trị của biến 2017
và 2018
lúc đầu sẽ được đặt tên là total_score
(tổng điểm)
Chúng ta sẽ sử dụng hàm gather()
trong package tidyverse
như sau:
library(tidyverse)
table2 <- table1 %>%
gather(
`2017`, `2018`, # 2 biến cần nhóm lại (gather)
key = "year", # Biến mới `year` bao gồm 2 giá trị 2017,2018
value = "total_score" # Biến mới `total_score` chứa giá trị của 2 biến `2017` và `2018` ban đầu
)
table2
## # A tibble: 6 x 3
## student year total_score
## <chr> <chr> <dbl>
## 1 Viet 2017 37.5
## 2 Nam 2017 40
## 3 Quoc 2017 45
## 4 Viet 2018 40
## 5 Nam 2018 40
## 6 Quoc 2018 42.5
Quá trình biến đổi dữ liệu vừa rồi được mô tả bằng hình ảnh sau:
spread
Spreading là quá trình ngược lại của gathering.
Cấu trúc hàm spread()
như sau:
table2 %>%
spread(
key = year, # spread biến year (các giá trị trong biến year thành các biến mới)
value = total_score
)
## # A tibble: 3 x 3
## student `2017` `2018`
## <chr> <dbl> <dbl>
## 1 Nam 40 40
## 2 Quoc 45 42.5
## 3 Viet 37.5 40
Như vậy, chúng ta đã vừa được học cách tổ chức dữ liệu theo cách mà chúng ta mong muốn bằng việc sử dụng hàm gather()
và spread()
trong package tidyverse
. Chúc các bạn học tập và làm việc hiệu quả với Ranalytics.vn
!