拆分-应用-合并

R 的可扩展数据处理

Michael Kane

Assistant Professor, Yale University

拆分-应用-合并

  • 拆分:split()
  • 应用:Map()
  • 合并:Reduce()
R 的可扩展数据处理

用 split() 分区

split() 函数用于分区数据

  • 第一个参数是要拆分的向量或 data.frame
  • 第二个参数是其取值定义分区的 factorinteger
R 的可扩展数据处理
# 获取按年份分组的按揭数据的行索引
 year_splits <- split(1:nrow(mort), mort[,"year"])
# year_splits 是列表
class(year_splits)
"list"
# 我们按照哪些年份拆分
names(year_splits)
"2008" "2009" "2010" "2011" "2012" "2013" "2014" "2015"
# 年份 2010 对应的前几行
year_splits[["2010"]][1:10]
1  6  7 10 21 23 24 27 29 38
R 的可扩展数据处理

用 Map() 计算

Map() 函数处理各分区

  • 第一个参数是对每个分区应用的函数
  • 第二个参数是分区集合
R 的可扩展数据处理

用 Map() 计算

col_missing_count <- function(mort) {
   apply(mort, 2, function(x) sum(x == 9))} 
# 对每个年份统计各列的缺失值数量
missing_by_year <- Map(
   function(x) col_missing_count(mort[x, ]),
   year_splits)

missing_by_year[["2008"]]

enterprise record_number msa 0 12 0 # ...
R 的可扩展数据处理

用 Reduce() 合并

Reduce() 函数合并所有分区的结果

  • 第一个参数:用于合并的函数
  • 第二个参数:分区后的数据
R 的可扩展数据处理
# 计算各列的缺失值总数
Reduce(`+`, missing_by_year)
enterprise         record_number                   msa 
         0                    64                     0 
# ... 
# 用年份标注行名
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

R 的可扩展数据处理

开始练习吧!

R 的可扩展数据处理

Preparing Video For Download...