Menu
CoddyTech

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

Thay 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
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 (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:

  1. Chuyển chuỗi đầu vào thành khung dữ liệu
  2. Dùng pivot_longer() để chuyển dữ liệu từ định dạng rộng sang định dạng dài
  3. Đổi tên các cột kết quả thành "subject" và "score"
  4. Sắp xếp dữ liệu theo tên học sinh, sau đó theo môn học
  5. 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

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