島田 芳男
2015/09/08
基本関数は5つ。
これにgroup_byを組み合わせることで集計していく。
関数名 _ 内容_ 類似の組み込み関数
filter _ 指定した条件に合うデータを抽出_ subset
select _ 列を抽出 _ data[,c('hoge','fuga')]などと同じ
mutate _ 列を追加 _ transform
arrange _ 並び替え _ order, sort
summarise _ 集約する _ aggregate
filterは条件に沿った行を抽出する。
使い方としては、最初の引数にデータフレームを指定して2つ目以降の引数に条件を指定する。
この書き方は他の関数においても同じ。
AND条件の時はカンマで区切るだけで良い(&を使っても良い)。
OR条件の時は|演算子でつなぐ。
# install.packages(c("dplyr","hflights")
library(dplyr)
library(hflights)
dim(hflights)
[1] 227496 21
hflights_df <- tbl_df(hflights)
head(hflights_df,3)
Source: local data frame [3 x 21]
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
1 2011 1 1 6 1400 1500 AA 428
2 2011 1 2 7 1401 1501 AA 428
3 2011 1 3 1 1352 1502 AA 428
Variables not shown: TailNum (chr), ActualElapsedTime (int), AirTime
(int), ArrDelay (int), DepDelay (int), Origin (chr), Dest (chr),
Distance (int), TaxiIn (int), TaxiOut (int), Cancelled (int),
CancellationCode (chr), Diverted (int)
filterは条件に沿った行を抽出する。
使い方としては、最初の引数にデータフレームを指定して2つ目以降の引数に条件を指定する。
この書き方は他の関数においても同じ。
AND条件の時はカンマで区切るだけで良い(&を使っても良い)。
OR条件の時は|演算子でつなぐ。
head(filter(hflights_df, Month==1, DayofMonth==1),3)
Source: local data frame [3 x 21]
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
1 2011 1 1 6 1400 1500 AA 428
2 2011 1 1 6 728 840 AA 460
3 2011 1 1 6 1631 1736 AA 1121
Variables not shown: TailNum (chr), ActualElapsedTime (int), AirTime
(int), ArrDelay (int), DepDelay (int), Origin (chr), Dest (chr),
Distance (int), TaxiIn (int), TaxiOut (int), Cancelled (int),
CancellationCode (chr), Diverted (int)
head(filter(hflights_df, Month==1|DayofMonth==1),3)
Source: local data frame [3 x 21]
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
1 2011 1 1 6 1400 1500 AA 428
2 2011 1 2 7 1401 1501 AA 428
3 2011 1 3 1 1352 1502 AA 428
Variables not shown: TailNum (chr), ActualElapsedTime (int), AirTime
(int), ArrDelay (int), DepDelay (int), Origin (chr), Dest (chr),
Distance (int), TaxiIn (int), TaxiOut (int), Cancelled (int),
CancellationCode (chr), Diverted (int)
selectは列を抽出する。
複数列を指定する時は、カンマで区切る。
隣接した列なら:で指定できる。
指定した列以外を抽出したい時はカッコで囲んで-をつける。
head(select(hflights_df, Year, Month, DayOfWeek),5)
Source: local data frame [5 x 3]
Year Month DayOfWeek
1 2011 1 6
2 2011 1 7
3 2011 1 1
4 2011 1 2
5 2011 1 3
head(select(hflights_df, Year:DayOfWeek),5)
Source: local data frame [5 x 4]
Year Month DayofMonth DayOfWeek
1 2011 1 1 6
2 2011 1 2 7
3 2011 1 3 1
4 2011 1 4 2
5 2011 1 5 3
head(select(hflights_df, -(Year:DayOfWeek)),3)
Source: local data frame [3 x 17]
DepTime ArrTime UniqueCarrier FlightNum TailNum ActualElapsedTime
1 1400 1500 AA 428 N576AA 60
2 1401 1501 AA 428 N557AA 60
3 1352 1502 AA 428 N541AA 70
Variables not shown: AirTime (int), ArrDelay (int), DepDelay (int), Origin
(chr), Dest (chr), Distance (int), TaxiIn (int), TaxiOut (int),
Cancelled (int), CancellationCode (chr), Diverted (int)
似たような働きをする関数にplyrパッケージのtransformがあるが、mutateは新しく追加した列を同一操作内で指定できる
head(
mutate(hflights_df, gain=ArrDelay - DepDelay, gain_per_hour=gain/(AirTime/60)),2)
Source: local data frame [2 x 23]
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
1 2011 1 1 6 1400 1500 AA 428
2 2011 1 2 7 1401 1501 AA 428
Variables not shown: TailNum (chr), ActualElapsedTime (int), AirTime
(int), ArrDelay (int), DepDelay (int), Origin (chr), Dest (chr),
Distance (int), TaxiIn (int), TaxiOut (int), Cancelled (int),
CancellationCode (chr), Diverted (int), gain (int), gain_per_hour (dbl)
arrangeは指定した列において並び替える
head(
arrange(hflights_df, ArrDelay, Month),3)
Source: local data frame [3 x 21]
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
1 2011 7 3 7 1914 2039 XE 2804
2 2011 12 25 7 741 926 OO 4591
3 2011 8 21 7 935 1039 OO 2001
Variables not shown: TailNum (chr), ActualElapsedTime (int), AirTime
(int), ArrDelay (int), DepDelay (int), Origin (chr), Dest (chr),
Distance (int), TaxiIn (int), TaxiOut (int), Cancelled (int),
CancellationCode (chr), Diverted (int)
desc関数と組み合わせることで逆順に並べられる。
head(
arrange(hflights_df, desc(ArrDelay)),3)
Source: local data frame [3 x 21]
Year Month DayofMonth DayOfWeek DepTime ArrTime UniqueCarrier FlightNum
1 2011 12 12 1 650 808 AA 1740
2 2011 8 1 1 156 452 CO 1
3 2011 11 8 2 721 948 MQ 3786
Variables not shown: TailNum (chr), ActualElapsedTime (int), AirTime
(int), ArrDelay (int), DepDelay (int), Origin (chr), Dest (chr),
Distance (int), TaxiIn (int), TaxiOut (int), Cancelled (int),
CancellationCode (chr), Diverted (int)
summariseは関数を指定することで、その関数で集約した結果を得ることができる
summarise(hflights_df, delay=mean(DepDelay, na.rm=TRUE))
Source: local data frame [1 x 1]
delay
1 9.444951
group_byで指定した列でもって、グループ化することができる。 この結果にこれまで挙げてきた関数を適用することで、グループ単位の結果が得られる。
planes <- group_by(hflights_df, TailNum)
delay <- summarise(planes,
count=n(),
dist=mean(Distance, na.rm=TRUE),
delay=mean(ArrDelay, na.rm=TRUE))
delay <- filter(delay, count>20, dist<2000)
head(delay,5)
Source: local data frame [5 x 4]
TailNum count dist delay
1 795 938.7157 NaN
2 N0EGMQ 40 1095.2500 1.918919
3 N10156 317 801.7192 8.199357
4 N10575 94 631.5319 18.148936
5 N11106 308 774.9805 10.101639
library(ggplot2)
ggplot(delay, aes(dist, delay)) +
geom_point(aes(size=count), alpha=1/2) +
geom_smooth() +
scale_size_area()