Định dạng rộng sang định dạng dài
Bài học 9 trên 14 trong khóa học Thao tác dữ liệu trong R của Coddy.
Trong bài học này, mình sẽ tập trung vào cách dùng hàm pivot_longer() từ package tidyr để chuyển dữ liệu từ định dạng rộng sang định dạng dài.
Tìm hiểu định dạng rộng và định dạng dài
Định dạng rộng: Mỗi biến có một cột riêng.
Định dạng dài: Các biến được lưu theo cặp khóa-giá trị, với một cột chứa tên biến và cột còn lại chứa các giá trị.
Hàm pivot_longer()
Hàm pivot_longer() từ tidyr dùng để chuyển dữ liệu từ định dạng rộng sang định dạng dài. Đây là cú pháp cơ bản:
pivot_longer(data, cols, names_to = "key", values_to = "value")Ví dụ:
# Tải thư viện cần thiết
library(tidyr)
# Tạo bộ dữ liệu mẫu ở dạng rộng
wide_data <- data.frame(
name = c("Alice", "Bob", "Charlie"),
math = c(85, 76, 90),
science = c(92, 88, 75),
history = c(78, 82, 85)
)
# Chuyển sang dạng dài
long_data <- pivot_longer(wide_data,
cols = c(math, science, history),
names_to = "subject",
values_to = "score")
print(long_data)Đầu ra:
# Một tibble: 9 × 3
name subject score
<chr> <chr> <dbl>
1 Alice math 85
2 Alice science 92
3 Alice history 78
4 Bob math 76
5 Bob science 88
6 Bob history 82
7 Charlie math 90
8 Charlie science 75
9 Charlie history 85Thay vì có 4 cột: name, math, science và history, ta có 3 cột: name, subject, score
Tìm hiểu các đối số
cols: Chỉ định những cột nào sẽ được chuyển sang định dạng dài.names_to: Đặt tên cho cột mới chứa tên các cột từ định dạng rộng.values_to: Đặt tên cho cột mới chứa các giá trị.
Tầm quan trọng trong phân tích dữ liệu
Dữ liệu ở định dạng dài thường được ưu tiên vì:
- Dễ thao tác và phân tích hơn bằng các công cụ như
dplyr - Phù hợp hơn với mô hình hóa thống kê và trực quan hóa
- Nhất quán với các nguyên tắc về dữ liệu gọn gàng
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Thử thách
DễTạo một hàm (function) chuyển đổi bộ dữ liệu điểm thi của học sinh từ định dạng rộng sang định dạng dài bằng hàm pivot_longer() từ package tidyr. Hàm này cần thực hiện các thao tác sau:
- Chuyển chuỗi đầu vào thành khung dữ liệu
- Dùng
pivot_longer()để chuyển dữ liệu từ định dạng rộng sang định dạng dài - Đổi tên các cột kết quả thành "subject" và "score"
- Sắp xếp dữ liệu theo tên học sinh, sau đó theo môn học
- In khung dữ liệu kết quả ở định dạng dài
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
input_string <- suppressWarnings(readLines(con))
# Chuyển chuỗi đầu vào thành khung dữ liệu
data <- read.csv(text = input_string, stringsAsFactors = FALSE)
# Tải package cần thiết
suppressPackageStartupMessages(library(tidyr))
suppressPackageStartupMessages(library(dplyr))
# TODO: Viết code bên dưới để biến đổi dữ liệu
# Dùng pivot_longer() để chuyển từ dạng rộng sang dạng dài
# Đổi tên các cột thành "subject" và "score"
# Sắp xếp dữ liệu theo tên sinh viên, rồi theo môn học
# In ra khung dữ liệu dạng dài sau khi biến đổi
print(result)Tất cả bài học trong Thao tác dữ liệu trong R
3Định hình lại dữ liệu
Định dạng rộng sang định dạng dàiĐịnh dạng dài sang định dạng rộngXử lý dữ liệu thiếuTự luyện tập: Trình biên dịch R online