Split-Apply-Combine

Xử lý dữ liệu có khả năng mở rộng trong R

Michael Kane

Assistant Professor, Yale University

Split-Apply-Combine

  • Split: split()
  • Apply: Map()
  • Combine: Reduce()
Xử lý dữ liệu có khả năng mở rộng trong R

Chia phần bằng split()

Hàm split() chia dữ liệu

  • Đối số đầu là vector hoặc data.frame cần chia
  • Đối số thứ hai là factor hoặc integer xác định các phần
Xử lý dữ liệu có khả năng mở rộng trong R
# Lấy các hàng tương ứng với từng năm trong dữ liệu thế chấp
 year_splits <- split(1:nrow(mort), mort[,"year"])
# year_splits là một list
class(year_splits)
"list"
# Các năm đã dùng để chia
names(year_splits)
"2008" "2009" "2010" "2011" "2012" "2013" "2014" "2015"
# Vài hàng đầu tương ứng với năm 2010
year_splits[["2010"]][1:10]
1  6  7 10 21 23 24 27 29 38
Xử lý dữ liệu có khả năng mở rộng trong R

Tính toán với Map()

Hàm Map() xử lý các phần đã chia

  • Đối số đầu là hàm áp dụng cho từng phần
  • Đối số thứ hai là các phần đã chia
Xử lý dữ liệu có khả năng mở rộng trong R

Tính toán với Map()

col_missing_count <- function(mort) {
   apply(mort, 2, function(x) sum(x == 9))} 
# Với mỗi năm, đếm số giá trị thiếu ở
# mọi cột
missing_by_year <- Map(
   function(x) col_missing_count(mort[x, ]),
   year_splits)

missing_by_year[["2008"]]
enterprise         record_number                   msa 
        0                    12                     0 
# ...
Xử lý dữ liệu có khả năng mở rộng trong R

Kết hợp với Reduce()

Hàm Reduce() kết hợp kết quả của mọi phần

  • Đối số đầu là hàm dùng để kết hợp
  • Đối số thứ hai là dữ liệu đã được chia phần
Xử lý dữ liệu có khả năng mở rộng trong R
# Tính tổng số giá trị thiếu theo cột
Reduce(`+`, missing_by_year)
enterprise         record_number                   msa 
         0                    64                     0 
# ... 
# Gắn tên hàng bằng năm
mby <- Reduce(rbind, missing_by_year)
row.names(mby) <- names(year_splits)
mby[1:3, 1:3]
     enterprise record_number msa
2008          0            12   0
2009          0             8   0
2010          0            10   0

Xử lý dữ liệu có khả năng mở rộng trong R

Cùng luyện tập nào!

Xử lý dữ liệu có khả năng mở rộng trong R

Preparing Video For Download...