データセットを縦型(long型)あるいは横型(wide型)へと変換します。tidy dataという考え方がポイントになりますので、このあたりについては一度別資料を探してみてください。

実例

縦型へ変換

tidyrパッケージのgather関数で行えます:

library(tidyr)
gather(iris, key = hoge, value = fuga, -Species)

keyには、まとめた時に「この行の値はどの変数に入ってたものか」を示す変数名を指定します。またvalueには、まとめた変数の値が格納されます。その後ろに、まとめ上げる変数群を指定します。ここではdplyr::select()のテクニックがそのまま使えます。

横型へ変換

tidyrパッケージのspread関数で行えます:

# irisにidの列を追加して、一旦gatherでまとめます
library(dplyr)
df <- mutate(iris, id = rownames(iris))
df <- gather(df, key = hoge, value = fuga, contains("l."))
head(df)
# これを再度バラします
spread(df, key = hoge, value = fuga)

このようにgatherとspreadは対応しています。なお、spreadを実行する際、処理後に各レコードが一意に特定できる列(主キーにあたるようなもの)が必要となります。関数の引数で指定する必要はないのですが、これがないと展開してくれずエラーを返すので注意してください。

Copyright © 2017 Kazutan.R.