“ group_by(region)%>%count()”和“ states_srs%>%count(region)”之间有什么区别?

时间:2018-07-12 10:05:20

标签: r count tibble

  1. 两个命令中列名如何形成?
  2. 哪个命令被认为是优化的?为什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

  1. 函数count()调用tally(),这将创建名为n的列。请参见tally()软件包中dplyr的来源。
  2. 函数count()已包含group_by。请参见count()软件包中dplyr的来源。因此,您的第二个变体已优化。您可以通过
  3. 推荐的microbenchmark来查看它
  4. group_by应用到tibble对象会增加过多的属性/从连接的grouped_df继承,因此也会增加内存使用量。

支持脚本(发给瑞梭鱼):

    states_srs <-read.csv("https://raw.githubusercontent.com/clauswilke/dviz.supp/master/data- 
           raw/US_regions/US_regions.csv")
    library(dplyr)
    library(microbenchmark)
    microbenchmark(w_gr <- states_srs %>% group_by(region) %>% count(), times = 1000L)
    # mean time: 2.5 milliseconds

    microbenchmark(wout_gr <- states_srs %>% count(region), times = 1000L)
    # mean time: 1.7 milliseconds

    str(w_gr)
    # Classes ‘grouped_df’, ‘tbl_df’, ‘tbl’ and 'data.frame':   4 obs. of  2 variables:
    # inherits grouped_df 
    help("grouped_df")

    str(wout_gr)
    # Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 4 obs. of  2 variables:
    # does not inherit grouped_df