作为试点调查的一部分,我向每个 Turker 提供了四个选项中的一组选项。数据如下所示:
> 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")