上週介紹過篩選 data frame 的方法:df[<vector 1>, <vector 2>]
。但這種方法有一個缺點:隨著篩選條件越來越多,篩選 data frame 的指令會越來越複雜,變得難以閱讀,例如:
library(tibble)
df <- as_tibble(iris)
# How long does it take to understand the command below?
df[(df$Species == "setosa") & (df$Sepal.Length < 5.8), c("Species", "Sepal.Width")]
#> # A tibble: 49 x 2
#> Species Sepal.Width
#> <fct> <dbl>
#> 1 setosa 3.5
#> 2 setosa 3
#> 3 setosa 3.2
#> 4 setosa 3.1
#> 5 setosa 3.6
#> 6 setosa 3.9
#> 7 setosa 3.4
#> 8 setosa 3.4
#> 9 setosa 2.9
#> 10 setosa 3.1
#> # … with 39 more rows
套件 dplyr
目的就是為了使這個過程變得更加容易:讓處理 data frame 的指令變得直覺易懂。
.csv
)可使用 RStudio Environment Pane > Import Dataset > From Text (readr)...
,或直接使用指令:
#> # A tibble: 177,780 x 5
#> year sex name n prop
#> <dbl> <chr> <chr> <dbl> <dbl>
#> 1 1880 M John 9655 0.0815
#> 2 1880 M William 9532 0.0805
#> 3 1880 M James 5927 0.0501
#> 4 1880 M Charles 5348 0.0452
#> 5 1880 M George 5126 0.0433
#> 6 1880 M Frank 3242 0.0274
#> 7 1880 M Joseph 2632 0.0222
#> 8 1880 M Thomas 2534 0.0214
#> 9 1880 M Henry 2444 0.0206
#> 10 1880 M Robert 2415 0.0204
#> # … with 177,770 more rows
如此便會將外部檔案讀入成 tibble
(data frame)
dplyr
有 2 個重要的函數可以用來取代上週講過得 [<vector 1> , <vector 2>]
select()
: 篩選出 data frame 中的變項 (variables) (i.e. columns of a data frame)filter()
: 篩選出 data frame 中特定的觀察值 (observations) (i.e. rows of a data frame)select()
與 filter()
分別取代了 [<vector 1> , <vector 2>]
之中的 vector 2
與 vector 1
的功能。除此之外,dplyr 還有 arrange()
可以用來將觀察值依據某些變項進行排序。select()
: 篩選出特定變項