summarize() 计算摘要统计量 搭配group_by()分组计算 ; 等效aggregate()


summarize() 即summarise(). 输出列包含group_by分组变量以及计算所得统计量

如: > flights %>% group_by(year,month,day) %>% summarize(delay=mean(dep_delay,na.rm=T)) # na.rm=T 计算前剥离缺失值na,否则统计值容易出现很多na

上述等效:aggregate(dep_delay~year+month+day,FUN=mean,data=flights) %>%head(20) 。只是summarize+group_by()很好的最后一个分组基础单位先循环

默认的aggregate(x,by,FUN) 将数据框x的观测行按by=分组,然后用FUN函数计算每组的summary statistics。结果包含by变量和x .  #by接 分组的list。 等效的使用方式汇总如下:

## Default S3 method:
aggregate(x, ...)

## S3 method for class 'data.frame'
aggregate(x, by, FUN, ..., simplify = TRUE, drop = TRUE)

## S3 method for class 'formula' #应用中很常见
aggregate(formula, data, FUN, ...,
          subset, na.action = na.omit)

## S3 method for class 'ts'
aggregate(x, nfrequency = 1, FUN = sum, ndeltat = 1,
          ts.eps = getOption("ts.eps"), ...)

 #formula, a formula, such as y ~ x or cbind(y1, y2) ~ x1 + x2, where the y variables are numeric data to be split into groups according to the grouping x variables (usually factors). ~左侧是要计算聚合值的变量,右侧代表分组依据。

  • n()常用于summarize()中,单独使用时计算行数。 flights %>% summarize(n=n())
  • n()与group_by搭配使用,计算每个分组有多少个观测。  flights %>% group_by(month) %>% summarize(n=n())  # n=n()等价n=sum(month)
  • 注:我n()会把缺失值包含在计数中,如果只算非缺失值,可以用sum(!is.na(x)) . # 需要再雕琢

  • 如只计算唯一值的数量,用n_distinct(). 如 >flights %>% group_by(dest) %>% summarize(carriers=n_distinct(carrier)) %>% arrange(desc(carriers))

注2:所有聚合函数都有na.rm参数,好在计算前除去缺失值。 也可以计算前 通过no_na<-flights %>% filter(!is.na(dep_delay),!is.na(arr_delay)) 这样先筛选非na的观测行。

 n()外的计数函数还包括

  tally(x, wt = NULL, sort = FALSE, name = "n")

  count(x, ..., wt = NULL, sort = FALSE, name = "n",
    .drop = group_by_drop_default(x))

  add_tally(x, wt, sort = FALSE, name = "n")

  add_count(x, ..., wt = NULL, sort = FALSE, name = "n")

summary()结合n()为作图准备:

  •  not_cancelled<-flights %>% filter(!is.na(dep_delay),!is.na(arr_delay)) # 筛选值非na 行
  • delays<-not_cancelled %>%  group_by(tailnum) %>%  summarize(delay=mean(arr_delay),n=n()) #生成summary statistics

  • ggplot(delays)+geom_point(aes(x=n,y=delay),alpha=0.1) # 基于summary statistics作图。
  •  常用于summarize()函数中的基础计算常常还包括:

    • sum()计数。  not_cancelled %>% group_by(year,month,day) %>% summarize(n_early=sum(dep_time<500))
    • mean() 所占比例。not_cancelled %>% group_by(year,month,day) %>% summarize(n_early=mean(arr_delay>60))
    • median()中位数。not_cancelled %>% group_by(year,month,day) %>% summarize( arr_delay1=median(arr_delay))
    • sd()标准差。 not_cancelled %>% group_by(dest) %>% summarize(distance_sd=sd(distance)) %>%arrange(desc(distance_sd)) 
    • IQR() 四分位距

    • mad() 绝对中值差

    • min(x) 最小值

    • quantile(x,0.25) 找出x中从小到大排序大于前25%而小于后75%的??
    • max(x) 最大值 .如:not_cancelled %>% group_by(year,month,day) %>% summarize(first=min(dep_time),last=max(dep_time))

    • first(x) nth(x,n) last(x) 取向量的第一个、第n个、最后一个值. 如not_cancelled %>% group_by(month,year,day) %>% summarize(tenth_dep=nth(dep_time,10))

aggregate() 数据统计的常用formular方式。

aggregate(formula, data, FUN, ..., subset, na.action = na.omit)
  • formula, 指定formula对象,包括符号~ ,以及两侧的变量,左侧代表待计算聚合值的变量,右侧代表分组的依据变量。
  • data 数据框
  • FUN 指定函数,按~分组把FUN应用在~左侧变量
  • ...FUN需要的其他参数
  • subset 指定data的观测子集
  • na.action 默认是忽略NA。如果不选择na.omit,则需指定函数去处理NA。

例子:

> aggregate(price~cut,diamonds,mean) #按cut分组,计算price在各组的平均值。

 > aggregate(price~cut+color,diamonds,mean) #多个分组依据,用加号+隔离。类似group_by(a.b)

> aggregate(cbind(price,carat)~cut,diamonds,mean)  #想按分组,计算多个变量。

> aggregate(cbind(price,carat)~cut+color,diamonds,mean) #按多个分组变量计算各自组内的多个变量