如何将列组合在一起,但过滤使用group_by函数创建的特定组

时间:2018-05-07 13:04:46

标签: r filter group-by dplyr rstudio

library(nycflights13)

data <- flights 
flights %>% group_by(carrier)

我使用nycflights13数据作为示例,我试图找出如何使用group_by函数,将运营商分组在一起并过滤运营商US&gt; 1。

1 个答案:

答案 0 :(得分:1)

可能存在对group_by如何运作的误解。来自?group_by:

> ?group_by
Most data operations are done on groups defined by variables. group_by() takes 
an existing tbl and converts it into a grouped tbl where operations are 
performed "by group" [...] grouping doesn't change how the data looks [...]
It changes how it acts with the other dplyr verbs.

从我可以收集的信息中,您要查找的是&gt;相同航班的计数。 1为美国航空公司。 Group_by可能不是最好的选择。在组级别应用操作时,Group_by非常有用,例如查找平均延迟时间:

> flights %>% group_by(carrier) %>% na.omit(.) %>%  
  summarise(mean = mean(dep_delay))
 # A tibble: 16 x 2
 carrier  mean
 <chr>   <dbl>
 1 9E      16.4 
 2 AA      8.57
 3 AS      5.83
....

但是,group_by不会自行更改或汇总您的数据。

> flights
# A tibble: 336,776 x 20
year month   day dep_time sched_dep_time dep_delay
  <int> <int> <int>    <int>          <int>     <dbl>
1  2013   1    1        517            515      2.00
2  2013   1    1        533            529      4.00

flights %>% group_by(carrier)
A tibble: 336,776 x 20 ...

请注意,未执行聚合,并且tibble包含相同数量的观察。正如其他人在评论中暗示的那样,您可能需要决定要聚合哪些功能,并查看其他聚合函数以提供帮助。下面是一个使用&#34;表&#34;的示例。通过&#34; dest&#34;产生频率表的功能。和&#34;起源&#34;对于运营商&#34; US。&#34;注意group_by没用过。

> flights %>% select(dest,carrier,origin) %>% filter(carrier == "US") %>% 
  table(.) %>% as_tibble(.) %>% filter(n > 1)

 # A tibble: 9 x 4
 dest  carrier origin     n
 <chr> <chr>   <chr>  <int>
1 CLT   US      EWR     3232
2 PHX   US      EWR     1172