Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

第71回 apply familyとdplyrパッケージの備忘録

今回はapply familyについて見ていきます。apply familyとは大量のデータを効率よく処理してくれる関数群のことです。for文を書かなくてもapply familyで解決できることもあります。apply familyには、apply(),tapply(),lapply(), sapply(),mapply()があります。

dplyrパッケージは、データ操作に特化したRのパッケージです。filter(), select(),mutate(),arrange(),summarise()があります。

こちらの記事は非常にわかりやすいです。(2016年5月8日追加)

apply familyとdplyrパッケージ

apply():行(1)、列(2)毎にデータをまとめて、処理関数に渡してくれます。

tapply():グループごとにデータをまとめて、処理関数に渡してくれます

lapply():データの要素を処理関数に渡し、リストを返してくれます。

sapply():lapplyと似ている。結果は、ベクトル、行列、配列で返してくれます。

mapply():任意のn番目の要素をまとめて処理関数に渡してくれます。

filter(subset):指定した条件に合うデータを抽出

select(data, c[“×”]):指定した列を抽出

mutate(transform):列を追加

arrange(order, sort):並び替える

summarise(aggregate):集約する

※カッコ内はRの類似関数です

apply

apply()の引数はapply(data, margin ,function)となっています。つまり(対象とする配列名、関数の処理方向(1:行、2:列)、処理関数)という順番で指定します。処理関数は、平均、分散、標準偏差、最大、最小などを使えます。以下のようなイメージです。

f:id:teruaki-sugiura:20160111181018p:plain

tapply

tapply()の引数は(data, index, function)となっています。同じ列内の異なるファクタをグループとしてまとめ、関数処理ができます。以下では、動物の種類、体重、捕獲場所という3列(animals, weight, area)のデータフレームとなっています。それに対し、「体重」を「動物の種類別」に「合計」したい、という場合に役立ちます。

f:id:teruaki-sugiura:20160111181030p:plain

lapply・sapply

1次元ベクトルやリストを渡して、各行ごとに関数で処理することができます。

lapply()は「list(リスト)」、sapplyは「vector, matrix(ベクトルや行列)」を返します。 as.numeric(lapply(x, function)とすれば、sapplyと同じ結果、リスト型ではなく、ベクトル型が得られる。

f:id:teruaki-sugiura:20160111181046p:plain

mapply

変数xと変数y、変数……(複数可能)を何らかの関数に渡して計算をさせるということが可能です。ただし同じ行番号ごとです。例ではとても簡単な関数ですが、複雑なものも可能です。

f:id:teruaki-sugiura:20160111181536p:plain

dplyrパッケージ

filter(subset)

filter()は条件に沿った行を抽出します。subset()と似ています。引数には、filter(dataframe, condition)という感じです。データフレームを指定し、条件をつけるという流れです。irisのデータセットを少し修正を加えたものを使います。

select(data,c[“×”])

select()はデータフレームの列を抽出する。複数の変数を指定する時は、カンマで区切って、指定する。余事象のように指定することで、指定した列以外を抽出できる。括弧で囲んで-(マイナス)をつける。select()の引数は、データフレーム、抽出する変数という順番で指定します。

mutate(transform)

mutate()はデータフレームに列を追加します。mutate()は新しい変数の追加と操作を一緒に指定できます 。mutate()の引数は、データフレーム、追加する変数の名前=処理方法という順番で指定します。

arrange(order, sort)

arrange()は指定列を並び替える関数です。desc()と使うと逆順に並べることができます。arrange()の引数は、データフレーム、並び替える基準となる変数の順番で指定します。

summarise(aggregate)

summarise()の引数は、データフレーム、関数の順番に指定します。関数内では、平均、分散などを指定できます。

□group_by

group_by()で指定した列でもって、グループ化することができる。 大規模データであればるほど便利な関数。group_by()の引数は、データフレーム、基準となる変数という順番で指定します。ここでは、大規模データのhflightsを使います。

library(hflights) hflights_df <- tbl_df(hflights) planes <- group_by(hflights_df, TailNum) # TailNumでデータをグループ化 delay <- summarise(planes, count=n(), dist=mean(Distance, na.rm=TRUE), delay=mean(ArrDelay, na.rm=TRUE))

f:id:teruaki-sugiura:20160111180519p:plain

delay <- filter(delay, count>20, dist<1000)

f:id:teruaki-sugiura:20160111180549p:plain

f:id:teruaki-sugiura:20160111180559p:plain

以上で今回はおしまい。

広告を非表示にする