以下のように、展開されている2次元データを元に戻す処理をしたいのですが、R言語でどう書けばよいでしょうか?

data.csv
X1 Y1 値
X1 Y2 値
X2 Y1 値
X2 Y2 値

output.csv
  Y1 Y2
X1 値 値
X2 値 値

列ごとにlevels()で取得したリストを、空配列のnameに入れておいて、あとからもう一度1行ずつ読み込んでnameでアクセスして目的の場所に入れなおそうとしてみたのですがうまくいきませんでした。
XやYがカテゴリカルデータなのですが、その名前に特殊記号([や/)が含まれているからかもしれないと思っています。

スマートな方法はありませんでしょうか…。
よろしくお願いいたします。