データセットを縦型(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を実行する際、処理後に各レコードが一意に特定できる列(主キーにあたるようなもの)が必要となります。関数の引数で指定する必要はないのですが、これがないと展開してくれずエラーを返すので注意してください。