Định dạng dài sang định dạng rộng
Bài học 10 trên 14 trong khóa học Thao tác dữ liệu trong R của Coddy.
Chuyển đổi dữ liệu từ định dạng dài sang định dạng rộng là một kỹ năng thiết yếu khi thao tác với dữ liệu, đặc biệt hữu ích để tạo các cách biểu diễn dữ liệu gọn hơn. Trong bài học này, chúng ta sẽ tập trung sử dụng hàm pivot_wider() từ package tidyr để chuyển đổi dữ liệu từ định dạng dài sang định dạng rộng.
1. Tìm hiểu định dạng dài và định dạng rộng
Định dạng dài: Các biến được lưu dưới dạng cặp khóa-giá trị, với một cột chứa tên biến và một cột khác chứa các giá trị.
Định dạng rộng: Mỗi biến có cột riêng.
2. Hàm pivot_wider()
Hàm pivot_wider() từ tidyr dùng để chuyển đổi dữ liệu từ định dạng dài sang định dạng rộng. Đây là cú pháp cơ bản:
pivot_wider(data, names_from = "key", values_from = "value")3. Ví dụ: Sử dụng pivot_wider()
Hãy xem một ví dụ:
# Tải thư viện cần thiết
library(tidyr)
# Tạo bộ dữ liệu mẫu ở định dạng dài
long_data <- data.frame(
name = c("Alice", "Alice", "Alice", "Bob", "Bob", "Bob"),
subject = c("math", "science", "history", "math", "science", "history"),
score = c(85, 92, 78, 76, 88, 82)
)
# Chuyển sang định dạng rộng
wide_data <- pivot_wider(long_data,
names_from = "subject",
values_from = "score")
print(wide_data)
4. Tìm hiểu các đối số
names_from: Chỉ định cột chứa tên cho các cột mới trong định dạng rộng.values_from: Chỉ định cột chứa các giá trị cho những cột mới.
5. Xử lý nhiều cột giá trị
Bạn có thể xoay nhiều cột giá trị cùng lúc:
long_data_multi <- data.frame(
name = c("Alice", "Alice", "Bob", "Bob"),
year = c(2022, 2023, 2022, 2023),
score = c(85, 90, 76, 82),
rank = c(2, 1, 3, 2)
)
wide_data_multi <- pivot_wider(long_data_multi,
names_from = year,
values_from = c(score, rank))
print(wide_data_multi)
Nắm vững hàm pivot_wider() sẽ giúp bạn chuyển đổi dữ liệu từ định dạng dài sang định dạng rộng một cách hiệu quả, tạo ra cách biểu diễn gọn hơn để đáp ứng các nhu cầu phân tích cụ thể trong R.
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 để chuyển đổi tập dữ liệu điểm của học sinh từ định dạng dài sang định dạng rộng bằng hàm pivot_wider() trong gói tidyr. Hàm 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_wider()để chuyển dữ liệu từ định dạng dài sang định dạng rộng - Sắp xếp khung dữ liệu thu được theo tên học sinh (dùng
%>% arrange(student)) - In ra khung dữ liệu ở định dạng rộng
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
df <- read.csv(text = input_string, stringsAsFactors = FALSE)
# Tải thư viện cần thiết
suppressPackageStartupMessages(library(tidyr))
suppressPackageStartupMessages(library(dplyr))
# TODO: Viết code bên dưới để biến đổi khung dữ liệu
# Gợi ý: Dùng hàm pivot_wider() để chuyển từ dạng dài sang dạng rộng
# Đừng quên sắp xếp khung dữ liệu kết quả theo tên học sinh
# In kết quả
# 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