dplyrの関数
dplyr
の主な機能は、下記の6つの関数です。取れるデータはtibbleなデータフレームとなっていますので、tibble
パッケージやtidyverse
パッケージと一緒に使いましょう。
- select: データフレームからカラムを抽出する
- filter: データフレームから条件に合うデータを絞り込む
- arrange: データフレームの列を並び替える
- rename: データフレームの列名を変更する
- mutate: 新しい変数や列を追加する、もしくは変数を変換する
- summarise: データフレーム内の要約統計量を生成する
列を操作する
列を抽出する
dplyr
を使ってデータフレームから指定した列を抽出するにはselect()
を使います。
dplyr::select()を使ってデータフレームから指定した列を抽出する
新しい変数や列を追加する、もしくは変数を変換する
新しく列を追加したり、列のデータを変換して、同名の列に代入するにはmutate()
を使います。
mutate(.data, ...)
transmute(.data, ...)
引数 | 説明 |
---|---|
.data | データフレーム |
… | 名前付きベクトル |
使用例
mutate(db, ID = c(1:5))
列の値の文字列を置換する
stringrパッケージのstr_replcae_all()
関数を使って、変換する。
mutate(.data, Name = str_replace_all(Name, pattern = " : ", replacement = " _ "))
便利な関数
- +. -
- log()
- オフセット:lead(), lag()
- dense_rank(), min_rank(), percent_rank(), row_number(), cume_dist(), ntile()
- cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()
- na_if(), coalesce()
- between(), case_when(), if_else(), recode(), recode_factor(), pmax(), pmin()
参照
- mutate_all(), mutate_if(), mutate_at()
- transmute(), transmute_all(), transmute_at()
ソートする
指定した列に対してソートをかけるには、arrange()
を使う。昇順でソートされるので、降順にしたい時は、desc()
で列を指定する。sort()
と異なり、NA
は常に列の最後になる。
arrange(.data, ...)
指定した列名で、ソートする。
使用例
dfBiologicals <- page %>%
html_nodes("table.biologicals") %>%
html_table() %>%
bind_rows() %>%
set_colnames(c("Type", "PublicName", "ProductName", "Year"))
## 年ごとにソートする
dfBiologicals %<>% arrange(Year)
降順にするため、desc()
を使ってみる。
> data <- arrange(iris, desc(Sepal.Length))
> head(data)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 7.9 3.8 6.4 2.0 virginica
2 7.7 3.8 6.7 2.2 virginica
3 7.7 2.6 6.9 2.3 virginica
4 7.7 2.8 6.7 2.0 virginica
5 7.7 3.0 6.1 2.3 virginica
6 7.6 3.0 6.6 2.1 virginica
列名を変換する
dplyr
を使って列名を変更するにはrename()
を使います。
dplyr::renameを使ってデータフレームの列名を変更する
行を抽出する
条件に合う行を絞り込む
filter(.data, ...)
便利な関数
==
,>
,>=
-&
,|
,!
,xor()
is.na()
near
指定した範囲内にある数値の行を絞り込む
between()
を使うと、指定した列の値が、特定した範囲内にある行を選択できる。
annotation_table <- mass_table %>% filter(between(Calc.Avg.Mass, mass-mass_tolerance, mass+mass_tolerance))
参考
- filter_all()
- filter_if()
- filter_at()
- arrange
- mutate
- select
- slice
- summarise
データフレームを結合する
- full_join() / innter_join() / left_join() / right_join() / semi_join() / anti_join()
- combine()
- intersect() / union() / union_all() / setdiff() / setequal()
データフレームを縦・横に結合する
データフレームを縦に結合(行を追加)するにはbind_rows()
、横に結合(列を追加)するにはbind_cols()
を使います。標準関数のrbind()
やcbind()
のtidyverse
版です。
bind_rows()
bind_cols()
標準のrbrind()やcbind()の機能拡張版。データフレームだけでなくリストでも結合してくれるので、purrr::mapで出力されたリストをbind_rows()
やbind_cols()
を用いてデータフレームに変換できる。
グループ化する
指定した列をキーにして、グループ化する
group_by()
> iris %>% group_by(Species) %>% head
# A tibble: 6 x 5
# Groups: Species [1]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fct>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
- group_by_all()
- group_by_if()
- group_by_at()
要素をカウントする
- tally(), count(), add_tally(), add_count()
グループ化した要素でカウントする
あらかじめgroup_by()
で集約したデータフレームを、tally()
で集計する。
> iris %>% group_by(Species) %>% tally
# A tibble: 3 x 2
Species n
<fct> <int>
1 setosa 50
2 versicolor 50
3 virginica 50
グループ化してカウントする
count(x, ...)
引数 | 説明 |
---|---|
x | カウントするテーブル |
… | グループ化する列名 |
使用例
## スクレイピングでデータを取得し、データフレームを作成する
dfBiologicals <- page %>%
html_nodes("table.biologicals") %>%
html_table() %>%
bind_rows() %>%
set_colnames(c("Type", "PublicName", "ProductName", "Year"))
## 年ごとに集計する
dfBiologicals.ByYears <- dfBiologicals %>%
count(Year)
特定の条件の物をカウントする
カウントするデータに条件を加えるのは、count()
では出来ないので、if_else()
やcase_when
を使って代替します。
> count(iris, if_else(Sepal.Length<5, "under 5", "over 5"))
# A tibble: 2 x 2
`if_else(Sepal.Length < 5, "under 5", "over 5")` n
<chr> <int>
1 over 5 128
2 under 5 22