【R語言】R包dplyr(一):數(shù)據(jù)轉(zhuǎn)換

日常在工作中會碰到很多數(shù)據(jù)批量處理的問題茎毁,有的時候單獨(dú)造輪子很費(fèi)時間,這個時候我發(fā)現(xiàn)了dplyr這個R包,能幫助你解決數(shù)據(jù)處理中的絕大多數(shù)難題允乐。dplyr是tidyverse中的一個核心包篓吁,用來進(jìn)行數(shù)據(jù)操作茫因。主要包括以下5個核心函數(shù)。

filter() 按值篩選觀測

arrange() 對行進(jìn)行重新排序

select() 按名稱選取變量

mutate() 使用現(xiàn)有變量的函數(shù)創(chuàng)建新變量

summarize()將多個值總結(jié)為一個摘要統(tǒng)計(jì)量

這些函數(shù)都可以和group_by()函數(shù)聯(lián)合起來使用杖剪,group_by()可以改變以上每個函數(shù)的作用范圍冻押,讓其在整個數(shù)據(jù)集上的操作變?yōu)樵诿總€分組上分別操作,這五個函數(shù)的工作方式都是相同的:

1.第一個參數(shù)是一個數(shù)據(jù)框盛嘿。

2.隨后的采納數(shù)使用變量名稱(不帶引號)描述了在數(shù)據(jù)框上進(jìn)行的操作洛巢。

3.輸出結(jié)果是一個新的數(shù)據(jù)框。

Installation

# The easiest way to get dplyr is to install the whole tidyverse:
install.packages("tidyverse")

# Alternatively, install just dplyr:
install.packages("dplyr")

Demo

下面將以一個航班信息的數(shù)據(jù)集來演示一下dplyr這個包的用法次兆。

#安裝并加載這個數(shù)據(jù)集
install.packages('nycflights13')
library(nycflights13)

1.1 使用filter()篩選行

filter()函數(shù)可以基于觀測的值篩選出一個觀測子集稿茉。第一個參數(shù)是數(shù)據(jù)框名稱,第二個參數(shù)及隨后的參數(shù)是用來篩選數(shù)據(jù)框的表達(dá)式类垦。

#篩選出1月1日出發(fā)的航班
> a <- filter(flights,month==1,day==1)
> head(a)
# A tibble: 6 x 19
   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier
  <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl> <chr>  
1  2013     1     1      517            515         2      830            819        11 UA     
2  2013     1     1      533            529         4      850            830        20 UA     
3  2013     1     1      542            540         2      923            850        33 AA     
4  2013     1     1      544            545        -1     1004           1022       -18 B6     
5  2013     1     1      554            600        -6      812            837       -25 DL     
6  2013     1     1      554            558        -4      740            728        12 UA     
# ... with 9 more variables: flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

1.1.1 比較運(yùn)算符

R提供了一套標(biāo)準(zhǔn)的比較運(yùn)算符:>,>=,<,<=,!=(不等于),==(等于)狈邑。

1.1.2 邏輯運(yùn)算符

filter()中的多個參數(shù)是由“與”組合起來的:每個表達(dá)式都必須為真才能讓一行觀測包含在輸出中。如果要實(shí)現(xiàn)其他類型的組合蚤认,你需要使用布爾運(yùn)算符: &表示"與"(也就是交集), | 表示“或”, ! 表示"非"米苹。

#找出11月或12月出發(fā)的航班
> b <- filter(flights,month==11 | month ==12)
> head(b)
# A tibble: 6 x 19
   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier
  <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl> <chr>  
1  2013    11     1        5           2359         6      352            345         7 B6     
2  2013    11     1       35           2250       105      123           2356        87 B6     
3  2013    11     1      455            500        -5      641            651       -10 US     
4  2013    11     1      539            545        -6      856            827        29 UA     
5  2013    11     1      542            545        -3      831            855       -24 AA     
6  2013    11     1      549            600       -11      912            923       -11 UA     
# ... with 9 more variables: flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

上述代碼的簡寫形式為:

c <- filter(flights,month %in% c(11,12))

其中,x %in% y表示 選出x是y中的一個值時的所有行砰琢。

filter()只能篩選出條件為TRUE的行蘸嘶;它會排除那些條件為FALSE和NA的行,如果想保留缺失值陪汽,可以明確指出:

> df <- tibble(x=c(1,NA,3)) #tibble()用于構(gòu)建一個數(shù)據(jù)框
> head(df)
# A tibble: 3 x 1
      x
  <dbl>
1     1
2    NA
3     3
> filter(df,x>1)
# A tibble: 1 x 1
      x
  <dbl>
1     3
> filter(df,is.na(x) | x > 1)
# A tibble: 2 x 1
      x
  <dbl>
1    NA
2     3

1.2 使用arrange()排列行

arrange()函數(shù)的工作方式與filter()函數(shù)非常相似训唱,但前者不選擇行,而是改變行的順序挚冤。它接受一個數(shù)據(jù)框和一組作為排序依據(jù)的列名作為參數(shù)况增。如果列名不止一個,那么就使用后面的列在前面排序的基礎(chǔ)上繼續(xù)排序训挡。

#將flights按年月日排序
> d <- arrange(flights,year,month,day)
> head(d)
# A tibble: 6 x 19
   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier
  <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl> <chr>  
1  2013     1     1      517            515         2      830            819        11 UA     
2  2013     1     1      533            529         4      850            830        20 UA     
3  2013     1     1      542            540         2      923            850        33 AA     
4  2013     1     1      544            545        -1     1004           1022       -18 B6     
5  2013     1     1      554            600        -6      812            837       -25 DL     
6  2013     1     1      554            558        -4      740            728        12 UA     
# ... with 9 more variables: flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

使用desc()可以按列進(jìn)行降序排序澳骤。

> e <- arrange(flights,desc(arr_delay))
> head(e)
# A tibble: 6 x 19
   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier
  <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl> <chr>  
1  2013     1     9      641            900      1301     1242           1530      1272 HA     
2  2013     6    15     1432           1935      1137     1607           2120      1127 MQ     
3  2013     1    10     1121           1635      1126     1239           1810      1109 MQ     
4  2013     9    20     1139           1845      1014     1457           2210      1007 AA     
5  2013     7    22      845           1600      1005     1044           1815       989 MQ     
6  2013     4    10     1100           1900       960     1342           2211       931 DL     
# ... with 9 more variables: flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

缺失值總是排在最后面。

> df <- tibble(x=c(5,NA,2))
> arrange(df,x)
# A tibble: 3 x 1
      x
  <dbl>
1     2
2     5
3    NA
#將缺失值排在前面
> arrange(df,desc(is.na(x)))
# A tibble: 3 x 1
      x
  <dbl>
1    NA
2     5
3     2

1.3 使用select()選擇列

通過基于變量名的操作澜薄,select()可以讓你快速生成一個有用的變量子集为肮。

#按名稱選擇列
> f <- select(flights,year,month,day)
> head(f)
# A tibble: 6 x 3
   year month   day
  <int> <int> <int>
1  2013     1     1
2  2013     1     1
3  2013     1     1
4  2013     1     1
5  2013     1     1
6  2013     1     1
# 選擇‘year’和‘day’之間的所有列(包括year和day)
> g <- select(flights,year:day)
> head(g)
# A tibble: 6 x 3
   year month   day
  <int> <int> <int>
1  2013     1     1
2  2013     1     1
3  2013     1     1
4  2013     1     1
5  2013     1     1
6  2013     1     1
#選擇不再‘year’和‘day’之間的所有列(不包括‘year’和‘day’)
> h <- select(flights,-(year:day))
> head(h)
# A tibble: 6 x 16
  dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum
     <int>          <int>     <dbl>    <int>          <int>     <dbl> <chr>    <int> <chr>  
1      517            515         2      830            819        11 UA        1545 N14228 
2      533            529         4      850            830        20 UA        1714 N24211 
3      542            540         2      923            850        33 AA        1141 N619AA 
4      544            545        -1     1004           1022       -18 B6         725 N804JB 
5      554            600        -6      812            837       -25 DL         461 N668DN 
6      554            558        -4      740            728        12 UA        1696 N39463 
# ... with 7 more variables: origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
#   hour <dbl>, minute <dbl>, time_hour <dttm>

還可以在select()函數(shù)中使用一些輔助函數(shù)。

start_with("abc") 匹配以abc開頭的名稱

ends_with("xyz") 匹配以xyz結(jié)尾的名稱

contains("ijk") 匹配包含ijk的名稱

matches("(.) \ \ 1") 選擇匹配正則表達(dá)式的那些變量肤京,這個正則表達(dá)式會匹配名稱中含有重復(fù)字符的變量颊艳。

num_range('x',1:3) 匹配x1,x2和x3

select()函數(shù)和everything()輔助函數(shù)結(jié)合起來使用,從而將幾個變量移到數(shù)據(jù)框的開頭棋枕。

> i <- select(flights,time_hour,air_time,everything())
> head(i)
# A tibble: 6 x 19
  time_hour           air_time  year month   day dep_time sched_dep_time dep_delay arr_time
  <dttm>                 <dbl> <int> <int> <int>    <int>          <int>     <dbl>    <int>
1 2013-01-01 05:00:00      227  2013     1     1      517            515         2      830
2 2013-01-01 05:00:00      227  2013     1     1      533            529         4      850
3 2013-01-01 05:00:00      160  2013     1     1      542            540         2      923
4 2013-01-01 05:00:00      183  2013     1     1      544            545        -1     1004
5 2013-01-01 06:00:00      116  2013     1     1      554            600        -6      812
6 2013-01-01 05:00:00      150  2013     1     1      554            558        -4      740
# ... with 10 more variables: sched_arr_time <int>, arr_delay <dbl>, carrier <chr>,
#   flight <int>, tailnum <chr>, origin <chr>, dest <chr>, distance <dbl>, hour <dbl>,
#   minute <dbl>

1.4 使用mutate()添加新變量

mutate()總是能夠添加新列到數(shù)據(jù)集的最后白修,查看所有列的最簡單的方式就是使用view()函數(shù)。

#先產(chǎn)生一個狹窄的數(shù)據(jù)集
> flights_sml <- select(flights,year:day,ends_with("delay"),distance,air_time)
> head(flights_sml)
# A tibble: 6 x 7
   year month   day dep_delay arr_delay distance air_time
  <int> <int> <int>     <dbl>     <dbl>    <dbl>    <dbl>
1  2013     1     1         2        11     1400      227
2  2013     1     1         4        20     1416      227
3  2013     1     1         2        33     1089      160
4  2013     1     1        -1       -18     1576      183
5  2013     1     1        -6       -25      762      116
6  2013     1     1        -4        12      719      150
#添加新列
> j <- mutate(flights_sml,gain=arr_delay - dep_delay,speed= distance/air_time * 60)
> head(j)
# A tibble: 6 x 9
   year month   day dep_delay arr_delay distance air_time  gain speed
  <int> <int> <int>     <dbl>     <dbl>    <dbl>    <dbl> <dbl> <dbl>
1  2013     1     1         2        11     1400      227     9  370.
2  2013     1     1         4        20     1416      227    16  374.
3  2013     1     1         2        33     1089      160    31  408.
4  2013     1     1        -1       -18     1576      183   -17  517.
5  2013     1     1        -6       -25      762      116   -19  394.
6  2013     1     1        -4        12      719      150    16  288.

創(chuàng)建新列后可以立馬使用戒悠,如果只想保留新變量熬荆,可以使用transmute()函數(shù)。

> k <- transmute(flights,gain=arr_delay-dep_delay,hours=air_time/60,gain_per_hour=gain/hours)
> head(k)
# A tibble: 6 x 3
   gain hours gain_per_hour
  <dbl> <dbl>         <dbl>
1     9  3.78          2.38
2    16  3.78          4.23
3    31  2.67         11.6 
4   -17  3.05         -5.57
5   -19  1.93         -9.83
6    16  2.5           6.4 

1.5 使用summarize()進(jìn)行分組摘要

summarize()可以將數(shù)據(jù)框折疊成一行绸狐。

> l <- summarise(flights,delay=mean(dep_delay,na.rm = T))
> head(l)
# A tibble: 1 x 1
  delay
  <dbl>
1  12.6

如果summarize()不與group_by()一起使用卤恳,那么它本身也沒有大用。group_by()可以將分析單位從整個數(shù)據(jù)集更改為單個分組寒矿。

#分組后就變成year突琳,month,day相同的為一組符相,來計(jì)算它們的平均延誤時間
> by_day <- group_by(flights,year,month,day) 
> m <- summarise(by_day,delay=mean(dep_delay,na.rm = T)) #通過設(shè)置na.rm=T拆融,可以在計(jì)算前去除缺失值,否則會得到大量的缺失值啊终。
`summarise()` regrouping output by 'year', 'month' (override with `.groups` argument)
> head(m)
# A tibble: 6 x 4
# Groups:   year, month [1]
   year month   day delay
  <int> <int> <int> <dbl>
1  2013     1     1 11.5 
2  2013     1     2 13.9 
3  2013     1     3 11.0 
4  2013     1     4  8.95
5  2013     1     5  5.73
6  2013     1     6  7.15

使用管道%>%提高代碼的可讀性镜豹,重點(diǎn)在于轉(zhuǎn)換的過程而不是轉(zhuǎn)換的對象。在閱讀代碼的時候蓝牲,%>%讀作 然后趟脂。以下這個例子研究每個目的地的距離和平均延誤時間之間的關(guān)系。

> delay <- flights %>%
  group_by(dest) %>%
  summarise(
    count=n(), #對分組后的dest各元素個數(shù)進(jìn)行計(jì)數(shù)
    dist=mean(distance,na.rm = T),
    delay=mean(arr_delay,na.rm = T)
  ) %>%
  filter(count > 20,dest != "HNL")
> head(delay)
# A tibble: 6 x 4
  dest  count  dist delay
  <chr> <int> <dbl> <dbl>
1 ABQ     254 1826   4.38
2 ACK     265  199   4.85
3 ALB     439  143  14.4 
4 ATL   17215  757. 11.3 
5 AUS    2439 1514.  6.02
6 AVL     275  584.  8.00

尋找航班數(shù)量和平均延誤時間之間的關(guān)系例衍。

> library(ggplot2)
> not_cancelled <- flights %>%
  filter(!is.na(dep_delay),!is.na(arr_delay))
> delays <- not_cancelled %>%
  group_by(tailnum) %>%
  summarise(
    delay=mean(arr_delay,na.rm = T),
    n=n
  )
> ggplot(data = delays,mapping = aes(x=n,y=delay))+
  geom_point()

查看上述圖形時昔期,通常應(yīng)該篩選掉那些觀測數(shù)量非常少的分組,這樣就可以避免受到特別小的分組中極端變動的影響佛玄,進(jìn)而更好的發(fā)現(xiàn)數(shù)據(jù)模式硼一。

delays %>%
  filter(n>25) %>%
  ggplot(mapping = aes(x=n,y=delay)) +
  geom_point()

另一個案例:使用Lahman包中的數(shù)據(jù)來計(jì)算大聯(lián)盟的每個棒球隊(duì)員的打擊率(安打數(shù)/打數(shù))。

#轉(zhuǎn)換成tibble梦抢,以便輸出更美觀
> install.packages("Lahman")
> library(Lahman)
> batting <- as_tibble(Lahman::Batting)
> batters <- batting %>%
  group_by(playerID) %>%
  summarise(
    ba=sum(H,na.rm = T)/sum(AB,na.rm = T),
    ab=sum(AB,na.rm = T)
  )
> batters %>%
  filter(ab>100) %>%
  ggplot(mapping = aes(x=ab,y=ba))+
  geom_point()+
  geom_smooth(se=F)

1.6 常用的摘要函數(shù)

只使用均值般贼,計(jì)數(shù)和求和是遠(yuǎn)遠(yuǎn)不夠的,R中還提供了很多其他的常用摘要函數(shù)奥吩。

1.6.1 位置度量

median(x)用來求中位數(shù)具伍,50%的x大于它,同時50%的x小于它圈驼。

將聚合函數(shù)和邏輯篩選組合起來使用。

> not_cancelled %>%
> group_by(year,month,day) %>%
  summarise(
    #平均延誤時間
    avg_delay1=mean(arr_delay),
    #平均正延誤時間
    avg_delay2=mean(arr_delay[arr_delay>0])
  )
`summarise()` regrouping output by 'year', 'month' (override with `.groups` argument)
# A tibble: 365 x 5
# Groups:   year, month [12]
    year month   day avg_delay1 avg_delay2
   <int> <int> <int>      <dbl>      <dbl>
 1  2013     1     1     12.7         32.5
 2  2013     1     2     12.7         32.0
 3  2013     1     3      5.73        27.7
 4  2013     1     4     -1.93        28.3
 5  2013     1     5     -1.53        22.6
 6  2013     1     6      4.24        24.4
 7  2013     1     7     -4.95        27.8
 8  2013     1     8     -3.23        20.8
 9  2013     1     9     -0.264       25.6
10  2013     1    10     -5.90        27.3
# ... with 355 more rows
1.6.2 秩的度量:min(x),quantile(x,0.25)和max(x)

quantile(x,0.25)會找出x中從小到大順序大于前25%而小于后75%的值望几。

示例:找出每天最早和最晚的航班何時出發(fā).

> n <- not_cancelled %>%
  group_by(year,month,day) %>%
  summarise(
    first=min(dep_time),
    last=max(dep_time)
  )
> head(n)
# A tibble: 6 x 5
# Groups:   year, month [1]
   year month   day first  last
  <int> <int> <int> <int> <int>
1  2013     1     1   517  2356
2  2013     1     2    42  2354
3  2013     1     3    32  2349
4  2013     1     4    25  2358
5  2013     1     5    14  2357
6  2013     1     6    16  2355
1.6.3 計(jì)數(shù)

前面已經(jīng)使用過n()來返回當(dāng)前分組的大小绩脆。如果想計(jì)算出非缺失值的數(shù)量,可以使用sum(!is.na(x))。如果想要計(jì)算出唯一值的數(shù)量靴迫,可以使用n_distinct(x)惕味。

#查看哪個目的地具有最多的航空公司
> o <- not_cancelled %>%
  group_by(dest) %>%
  summarise(carriers=n_distinct(carrier)) %>% #只計(jì)算唯一值
  arrange(desc(carriers))
> head(o)
# A tibble: 6 x 2
  dest  carriers
  <chr>    <int>
1 ATL          7
2 BOS          7
3 CLT          7
4 ORD          7
5 TPA          7
6 AUS          6

###關(guān)于n_distinct()的理解,可以運(yùn)行一下代碼玉锌,實(shí)際上是去除唯一值的重復(fù)值名挥,只看唯一值的數(shù)量。
> x <- sample(1:10, 1e5, rep = TRUE)
> length(unique(x))
> n_distinct(x) #與上一行代碼相當(dāng)

因?yàn)橛?jì)數(shù)太常用了主守,所以dplyr提供了一個簡單的輔助函數(shù)禀倔,用于只需要計(jì)數(shù)的情況。

> not_cancelled %>%
   count(dest)
#計(jì)算每架飛機(jī)飛行的總里程参淫,實(shí)際上就是求和救湖。
> not_cancelled %>%
    count(tailnum,wt=distance)
1.6.4 邏輯值的計(jì)數(shù)和比例

當(dāng)與數(shù)值型函數(shù)一同使用時,TRUE會轉(zhuǎn)換成1涎才,F(xiàn)ALSE會轉(zhuǎn)換成0鞋既,這使得sum()mean()非常適用于邏輯值:sum(x)可以找出x中TRUE的數(shù)量,mean(x)則可以找出比例耍铜。

#早上五點(diǎn)前出發(fā)的有多少架航班
> not_cancelled %>%
+   group_by(year,month,day) %>%
+   summarise(n_nearly=sum(dep_time<500))
`summarise()` regrouping output by 'year', 'month' (override with `.groups` argument)
# A tibble: 365 x 4
# Groups:   year, month [12]
    year month   day n_nearly
   <int> <int> <int>    <int>
 1  2013     1     1        0
 2  2013     1     2        3
 3  2013     1     3        4
 4  2013     1     4        3
 5  2013     1     5        3
 6  2013     1     6        2
 7  2013     1     7        2
 8  2013     1     8        1
 9  2013     1     9        3
10  2013     1    10        3
# ... with 355 more rows

#延誤超過1小時的航班比例是多少
> not_cancelled %>%
+   group_by(year,month,day) %>%
+   summarise(hour_perc=mean(arr_delay>60))
`summarise()` regrouping output by 'year', 'month' (override with `.groups` argument)
# A tibble: 365 x 4
# Groups:   year, month [12]
    year month   day hour_perc
   <int> <int> <int>     <dbl>
 1  2013     1     1    0.0722
 2  2013     1     2    0.0851
 3  2013     1     3    0.0567
 4  2013     1     4    0.0396
 5  2013     1     5    0.0349
 6  2013     1     6    0.0470
 7  2013     1     7    0.0333
 8  2013     1     8    0.0213
 9  2013     1     9    0.0202
10  2013     1    10    0.0183
# ... with 355 more rows
1.7 分組新變量(和篩選器)

雖然與summarize()函數(shù)結(jié)合起來使用是最有效的邑闺,但分組也可以與mutate()filter()函數(shù)結(jié)合,以完成非常便捷的操作棕兼。

示例一:找出每個分組中最差的成員陡舅。

> flights_sml %>%
+   group_by(year,month,day) %>%
+   filter(rank(desc(arr_delay))<5)
# A tibble: 1,464 x 7
# Groups:   year, month, day [365]
    year month   day dep_delay arr_delay distance air_time
   <int> <int> <int>     <dbl>     <dbl>    <dbl>    <dbl>
 1  2013     1     1       853       851      184       41
 2  2013     1     1       290       338     1134      213
 3  2013     1     1       260       263      266       46
 4  2013     1     1       379       456     1092      222
 5  2013     1     2       268       288     1092      203
 6  2013     1     2       334       323      937      150
 7  2013     1     2       337       368     2586      346
 8  2013     1     2       379       359     1620      228
 9  2013     1     3       174       176     1008      152
10  2013     1     3       268       270     1069      158
# ... with 1,454 more rows

其中對rank()函數(shù)的使用做一個補(bǔ)充。

rank()函數(shù)是對一維度數(shù)組程储、向量x 進(jìn)行排序蹭沛。若x 為數(shù)值,則按照小數(shù)在前大數(shù)在后的原則進(jìn)行排序章鲤。

rank() 將數(shù)據(jù)分為確定值與缺失值兩種摊灭。缺失值可按先后排在確定值之前(na.last = FALSE);也可排在之后(na.last = TRUE),败徊;也可保留帚呼,不參與排序(na.last = "keep")。

"first" 是最基本的排序皱蹦,小數(shù)在前大數(shù)在后煤杀,相同元素先者在前后者在后。

"max" 是相同元素都取該組中最好的水平沪哺,即通常所講的并列排序沈自。

"min" 是相同元素都取該組中最差的水平,可以增大序列的等級差異辜妓。

"average" 是相同元素都取該組中的平均水平枯途,該水平可能是個小數(shù)忌怎。

"random" 是相同元素隨機(jī)編排次序,避免了“先到先得”酪夷,“權(quán)重”優(yōu)于“先后順序”的機(jī)制增大了隨機(jī)的程度榴啸。

> rank(t <- c(6.8, 8.1, 7.2))
[1] 1 3 2

示例二:找出大于某個閾值的所有分組:

 > popular_dests <- flights %>%
+   group_by(dest) %>%
+   filter(n()>365)
> head(popular_dests)
# A tibble: 6 x 19
# Groups:   dest [5]
   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier
  <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl> <chr>  
1  2013     1     1      517            515         2      830            819        11 UA     
2  2013     1     1      533            529         4      850            830        20 UA     
3  2013     1     1      542            540         2      923            850        33 AA     
4  2013     1     1      544            545        -1     1004           1022       -18 B6     
5  2013     1     1      554            600        -6      812            837       -25 DL     
6  2013     1     1      554            558        -4      740            728        12 UA     
# ... with 9 more variables: flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
#   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

參考鏈接:
1.https://dplyr.tidyverse.org/
2.《R for Data Science》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晚岭,隨后出現(xiàn)的幾起案子鸥印,更是在濱河造成了極大的恐慌,老刑警劉巖坦报,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库说,死亡現(xiàn)場離奇詭異,居然都是意外死亡燎竖,警方通過查閱死者的電腦和手機(jī)璃弄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來构回,“玉大人夏块,你說我怎么就攤上這事∠说В” “怎么了脐供?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長借跪。 經(jīng)常有香客問我政己,道長,這世上最難降的妖魔是什么掏愁? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任歇由,我火速辦了婚禮,結(jié)果婚禮上果港,老公的妹妹穿的比我還像新娘沦泌。我一直安慰自己,他們只是感情好辛掠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布谢谦。 她就那樣靜靜地躺著,像睡著了一般萝衩。 火紅的嫁衣襯著肌膚如雪回挽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天猩谊,我揣著相機(jī)與錄音千劈,去河邊找鬼。 笑死牌捷,一個胖子當(dāng)著我的面吹牛墙牌,可吹牛的內(nèi)容都是我干的袁梗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼憔古,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淋袖?” 一聲冷哼從身側(cè)響起鸿市,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎即碗,沒想到半個月后焰情,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剥懒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年内舟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片初橘。...
    茶點(diǎn)故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡验游,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出保檐,到底是詐尸還是另有隱情耕蝉,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布夜只,位于F島的核電站垒在,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扔亥。R本人自食惡果不足惜场躯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旅挤。 院中可真熱鬧踢关,春花似錦、人聲如沸谦铃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驹闰。三九已至瘪菌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘹朗,已是汗流浹背师妙。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屹培,地道東北人默穴。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓怔檩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蓄诽。 傳聞我的和親對象是個殘疾皇子薛训,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評論 2 345