Menu
CoddyTech

Đị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.

quiz iconTự kiểm tra

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 độ.

quiz iconTự kiểm tra

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 độ.

quiz iconTự kiểm tra

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 độ.

challenge icon

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:

  1. Chuyển chuỗi đầu vào thành khung dữ liệu
  2. Dùng pivot_wider() để chuyển dữ liệu từ định dạng dài sang định dạng rộng
  3. Sắp xếp khung dữ liệu thu được theo tên học sinh (dùng %>% arrange(student))
  4. 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

Tự luyện tập: Trình biên dịch R online