gpt4 book ai didi

中间重新整形

转载 作者:行者123 更新时间:2023-12-04 10:15:49 29 4
gpt4 key购买 nike

作为试点调查的一部分,我向每个 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")

    最佳答案

    我建议对你的名字做一些 gsub 以将它们变成 R 更喜欢的形式,换句话说,时间变量是最后一项,而不是中间项,并带有“。”作为默认分隔符。

    试试这个:

    names(so) = gsub("([a-z])_([0-9])_([0-9])", "\\1_\\3\\.\\2", names(so))
    so.l = reshape(so, direction="long", varying=2:9, timevar="set", idvar=1)

    然后,如果要按 WorkerId 排序:
    so.l = so.l[order(so.l$WorkerId), ]

    关于中间重新整形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161807/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com