このパッケージがすごい2014: dplyr
library(dplyr)

この記事はR Advent Calender 2014@Qiita1日目の記事「このパッケージがすごい2014」の一部です

dplyr: A Grammar of Data Manipulation

創造神・羽鳥氏が作りしパッケージ。データフレームの操作に特化したplyrパッケージという感じです。このパッケージを利用するようになって、データ解析作業がかなり捗りました :)

ここでは、irisデータを例にして、データ解析で頻繁に行う操作に使える数を紹介します。

データの整理

iris %>%
  select(contains("Sepal")) %>%
  filter(Sepal.Length >= 5, Sepal.Width <= 2.6) %>%
  rename(sepal.length = Sepal.Length) %>%
  mutate(sepal.length = round(sepal.length, 0)) %>%
  arrange(Sepal.Width) %>%
  head()
##   sepal.length Sepal.Width
## 1            5         2.0
## 2            6         2.2
## 3            6         2.2
## 4            6         2.2
## 5            6         2.3
## 6            6         2.3

データの集約

iris %>%
  group_by(Species) %>%
    summarise_each(
      funs(mean), Sepal.Length, Sepal.Width)
## Source: local data frame [3 x 3]
## 
##      Species Sepal.Length Sepal.Width
## 1     setosa        5.006       3.428
## 2 versicolor        5.936       2.770
## 3  virginica        6.588       2.974

データの結合

merge関数よりも柔軟なデータフレームの結合が行えます。by引数で結合に用いる変数を指定できます。

df1 <- data.frame(
  Fruit = c("Apple", "Banana", "Melon"),
  Price = c(100, 80, 360),
  Count = c(3, 1, 1))
df1
##    Fruit Price Count
## 1  Apple   100     3
## 2 Banana    80     1
## 3  Melon   360     1
df2 <- data.frame(
  Fruit = c("Apple", "Pear", "Pine"),
  Size = c("L", "M", "S"))
df2
##   Fruit Size
## 1 Apple    L
## 2  Pear    M
## 3  Pine    S
inner_join(df1, df2) # 2つのデータフレームに共通する項目をもとに結合
## Joining by: "Fruit"
##   Fruit Price Count Size
## 1 Apple   100     3    L
left_join(df1, df2)  # 2つのデータフレームを結合。欠損値はNAとして扱われる
## Joining by: "Fruit"
##    Fruit Price Count Size
## 1  Apple   100     3    L
## 2 Banana    80     1 
## 3  Melon   360     1 
semi_join(df1, df2)  # 2つのデータフレームに共通する変数のみ結合
## Joining by: "Fruit"
##   Fruit Price Count
## 1 Apple   100     3
anti_join(df1, df2)  # 結合できない値を返す
## Joining by: "Fruit"
##    Fruit Price Count
## 1  Melon   360     1
## 2 Banana    80     1

参考