パイロット調査の一環として、私は各ターカーに 4 つの選択肢の中から一連の選択肢を提示しました。データは次のようになります。
> so
WorkerId pio_1_1 pio_1_2 pio_1_3 pio_1_4 pio_2_1 pio_2_2 pio_2_3 pio_2_4
1 1 Yes No No No No No Yes No
2 2 No Yes No No Yes No Yes No
3 3 Yes Yes No No Yes No Yes No
私はそれが次のように見えることを望みます:
WorkerId set pio1 pio2 pio3 pio4
1 1 Yes No No No
1 2 No No Yes No
...
私はこれをいくつかの方法でこじ開けることができますが、どれも非常に洗練されているようには見えません:
- 数値の順序を正規表現と逆参照で入れ替えてから reshape() を使用する
- アンダースコア間の最初の数字を解析し、それを長く整形する独自の小さな関数を作成する
- 列を分割してからスタックする (正しい順序に依存)
しかし、これらはすべて、いわゆる「倍幅」フォーマットのデータが独自の構造を持っているという考えを無視しているように思えます。これには reshape2 パッケージを使用したいと思っていますが、データが cast() で生成されたにもかかわらず、この data.frame を元に戻すのに役立つオプションがありません。
提案を歓迎します。
so <- structure(list(WorkerId = 1:3, pio_1_1 = structure(c(2L, 1L,
2L), .Label = c("No", "Yes"), class = "factor"), pio_1_2 = structure(c(1L,
2L, 2L), .Label = c("No", "Yes"), class = "factor"), pio_1_3 = structure(c(1L,
1L, 1L), .Label = c("No", "Yes"), class = "factor"), pio_1_4 = structure(c(1L,
1L, 1L), .Label = "No", class = "factor"), pio_2_1 = structure(c(1L,
2L, 2L), .Label = c("No", "Yes"), class = "factor"), pio_2_2 = structure(c(1L,
1L, 1L), .Label = c("No", "Yes"), class = "factor"), pio_2_3 = structure(c(2L,
2L, 2L), .Label = c("No", "Yes"), class = "factor"), pio_2_4 = structure(c(1L,
1L, 1L), .Label = "No", class = "factor")), .Names = c("WorkerId",
"pio_1_1", "pio_1_2", "pio_1_3", "pio_1_4", "pio_2_1", "pio_2_2",
"pio_2_3", "pio_2_4"), row.names = c(NA, 3L), class = "data.frame")