dplyr

データフレームを操作するためのパッケージ

dplyrの関数

dplyrの主な機能は、下記の6つの関数です。取れるデータはtibbleなデータフレームとなっていますので、tibbleパッケージやtidyverseパッケージと一緒に使いましょう。

列を操作する

列を抽出する

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 = " _ "))

便利な関数

参照

ソートする

指定した列に対してソートをかけるには、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, ...)

便利な関数

指定した範囲内にある数値の行を絞り込む

between()を使うと、指定した列の値が、特定した範囲内にある行を選択できる。

annotation_table <- mass_table %>% filter(between(Calc.Avg.Mass, mass-mass_tolerance, mass+mass_tolerance))

参考

データフレームを結合する

データフレームを縦・横に結合する

データフレームを縦に結合(行を追加)するには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()で集約したデータフレームを、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

See Also

tibble

データフレームの拡張版。

tidyr

データをtidyに整形する

magrittr

パイプ演算子を使うためのパッケージ

jsonlite

JSONを処理するためのパッケージ

xml2

XMLを扱うためのパッケージ

rvest

HTMLやXMLを簡単に操作するためのパッケージ