ITPub博客

首页 > > > tidyfst之超级汇总:summarise_vars

tidyfst之超级汇总:summarise_vars

作者:浪花小雨滴 时间:2020-04-13 17:11:55 0 删除 编辑

作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言数据高效处理指南》。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。

继续对标dplyr最新特性dplyr 1.0.0: working across columns - Tidyverse,这里我们看如何对多个列进行汇总。这里推出summarise_vars这个函数,能够通过灵活选择的列来进行汇总计算。

library(pacman)
p_load(tidyfst)

starwars = dplyr::starwars

starwars %>% summarise_vars(is.character,uniqueN)
#>     name hair_color skin_color eye_color gender homeworld species
#>    <int>      <int>      <int>     <int>  <int>     <int>   <int>
#> 1:    87         13         31        15      5        49      38

starwars %>% 
  add_count_dt(species) %>% 
  filter_dt(n > 1) %>% 
  summarise_vars("sex|gender|homeworld",.func = uniqueN,by = species)
#>     species gender homeworld
#>      <char>  <int>     <int>
#> 1:    Human      2        16
#> 2:    Droid      2         3
#> 3:  Wookiee      1         1
#> 4:   Gungan      1         1
#> 5:     <NA>      2         3
#> 6:   Zabrak      1         2
#> 7:  Twi'lek      2         1
#> 8: Mirialan      1         1
#> 9: Kaminoan      2         1

starwars %>% 
  add_count_dt(homeworld) %>% 
  filter_dt(n > 1) %>% 
  summarise_vars(is.numeric,mean,na.rm = T,by = homeworld)
#>     homeworld   height      mass birth_year     n
#>        <char>    <num>     <num>      <num> <num>
#>  1:  Tatooine 169.8000  85.37500   54.64444    10
#>  2:     Naboo 175.4545  64.16667   55.00000    11
#>  3:  Alderaan 176.3333  64.00000   43.00000     3
#>  4:  Kashyyyk 231.0000 124.00000  200.00000     2
#>  5:  Corellia 175.0000  78.50000   25.00000     2
#>  6:      <NA> 138.7500  82.00000  334.33333    10
#>  7:    Kamino 208.3333  83.10000   31.50000     3
#>  8: Coruscant 173.6667  50.00000   91.00000     3
#>  9:    Ryloth 179.0000  55.00000   48.00000     2
#> 10:    Mirial 168.0000  53.10000   49.00000     2

通过上面的例子,我们明确:

1、summarise_vars自带分组参数,这样分组计算的效率更佳

2、tidyfst中不使用n_distinct函数,而是使用data.table中的uniqueN函数对独立值进行计数

3、tidyfst总是强调使用正则表达式进行列选择,这样更加高效。因此当你希望使用x/y/z三列的时候,推荐使用“x|y|z”来选择列。如果需要精确匹配,只要使用正则的“^”和“$”加以限定即可。比如要精确匹配“x”,那么就用“^x$|y|z”。

原文作者:;如有侵权,请联系管理员删除。

下一篇: 学习MongoDB数据库
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39985