Tổng hợp dữ liệu với dplyr
Bài học 7 trên 14 trong khóa học Thao tác dữ liệu trong R của Coddy.
Tổng hợp dữ liệu là bước quan trọng trong phân tích dữ liệu, giúp bạn tóm tắt và rút ra thông tin hữu ích từ tập dữ liệu. Package dplyr trong R cung cấp các hàm mạnh mẽ để tổng hợp dữ liệu, đặc biệt là group_by() và summarize(). Hãy cùng tìm hiểu cách sử dụng các hàm này hiệu quả.
Hàm group_by()
Hàm group_by() cho phép bạn nhóm dữ liệu dựa trên một hoặc nhiều biến. Đây thường là bước đầu tiên khi tổng hợp dữ liệu.
# Khung dữ liệu mẫu
df <- data.frame(
category = c("A", "B", "A", "B", "A"),
value = c(10, 15, 20, 25, 30)
)
# Nhóm dữ liệu theo category
grouped_df <- group_by(df, category)
print(grouped_df)Đầu ra:
# Một tibble: 5 × 2
# Nhóm: category [2]
category value
<chr> <dbl>
1 A 10
2 B 15
3 A 20
4 B 25
5 A 30Hàm summarize()
Sau khi nhóm dữ liệu, hãy dùng summarize() để tính các thống kê tóm tắt cho từng nhóm.
# Tính giá trị trung bình cho từng nhóm
result <- summarize(grouped_df, mean_value = mean(value))
print(result)Đầu ra:
# A tibble: 2 × 2
category mean_value
<chr> <dbl>
1 A 20
2 B 20Kết hợp group_by() và summarize()
Bạn có thể nối các hàm này bằng toán tử pipe %>% để code dễ đọc hơn:
result <- df %>%
group_by(category) %>%
summarize(mean_value = mean(value),
sum_value = sum(value),
count = n())
print(result)Đầu ra:
# A tibble: 2 × 4
category mean_value sum_value count
<chr> <dbl> <dbl> <int>
1 A 20 60 3
2 B 20 40 2Nhiều thống kê tóm tắt
Bạn có thể tính nhiều thống kê trong một lần gọi summarize():
result <- df %>%
group_by(category) %>%
summarize(
mean_value = mean(value),
min_value = min(value),
max_value = max(value),
count = n()
)
print(result)Đầu ra:
# A tibble: 2 × 5
category mean_value min_value max_value count
<chr> <dbl> <dbl> <dbl> <int>
1 A 20 10 30 3
2 B 20 15 25 2Bà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
Trung bìnhTạo một hàm xử lý dữ liệu bán hàng bằng các hàm dplyr. Hàm cần thực hiện các thao tác sau:
- Nhóm dữ liệu theo danh mục sản phẩm
- Tính các số liệu thống kê tổng hợp sau cho từng nhóm:
- Tổng doanh số
- Giá trung bình
- Số mặt hàng đã bán
- Sắp xếp kết quả theo tổng doanh số giảm dần
- Trả về khung dữ liệu đã xử lý
In khung dữ liệu kết quả.
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
input_data <- suppressWarnings(readLines(con))
# Chuyển chuỗi đầu vào thành khung dữ liệu
suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(readr))
sales_data <- read.csv(paste(input_data, collapse = "\n"))
# TODO: Viết code bên dưới để xử lý dữ liệu bán hàng
# Gợi ý: Dùng các hàm của dplyr như group_by(), summarize(), arrange(), desc()
process_sales_data <- function(data) {
# Viết code tại đây
# Trả về khung dữ liệu đã xử lý
return(data)
}
# Xử lý dữ liệu bán hàng
result <- process_sales_data(sales_data)
# In ra 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