【问题标题】:Is there an R function for pivoting multiple columns to the same row?是否有用于将多列旋转到同一行的 R 函数?
【发布时间】:2021-02-28 03:14:34
【问题描述】:

我最近进行了一项实验,要求每个参与者为呈现的每种刺激填写一个量表,我的数据现在看起来像这样:

参与者 Stim1_1 Stim1_2 Stim1_3 Stim2_1 Stim2_2 Stim2_3 Stim3_1 Stim3_2 Stim3_3

一个

具有多种刺激和多种规模项目。 我想以此为轴,使其成为一个长数据集,每个刺激都有自己的行,每个项目组成自己的列,如下所示:

参与者刺激 Item1 Item2 Item3

A 1
2
3
B 1
乙2
B 3

如果这有意义的话。我正在考虑使用 pivot_longer,但这似乎为每个刺激和项目创建一个新行,以便刺激 1、项目 1 以及刺激 1、项目 2 等都有自己的行。有什么方法可以这样做?

【问题讨论】:

    标签: r pivot long-integer organization


    【解决方案1】:

    您在使用 pivot_longer 时走在了正确的轨道上。使用单个 pivot_wider 可能有更简单的方法,但我自己将其分解为 3 个步骤。

    首先,我以长格式获取所有内容。然后我按照我想要的方式分解列名,并将数据转换为整洁的格式。然后我更宽地旋转以使列恢复为人类可读的格式。

    library(dplyr)
    library(tidyr)
    
    df <- dplyr::tribble(
      ~Participant,~Stim1_1,~Stim1_2,~Stim1_3,~Stim2_1,~Stim2_2,~Stim2_3,~Stim3_1,~Stim3_2,~Stim3_3,
      "A",NA,NA,NA,NA,NA,NA,NA,NA,NA,
      "B",NA,NA,NA,NA,NA,NA,NA,NA,NA,
    )
    
    df %>% tidyr::pivot_longer(
      Stim1_1:Stim3_3,
      names_prefix = "Stim"
    ) %>%
      tidyr::separate(name,c("Stim","Item"),sep = "_") %>%
      pivot_wider(
        names_from = Item,
        values_from = value,
        names_prefix = "Item"
      )
    
    # # A tibble: 6 x 5
    # Participant Stim  Item1 Item2 Item3
    # <chr>       <chr> <lgl> <lgl> <lgl>
    # 1 A           1     NA    NA    NA   
    # 2 A           2     NA    NA    NA   
    # 3 A           3     NA    NA    NA   
    # 4 B           1     NA    NA    NA   
    # 5 B           2     NA    NA    NA   
    # 6 B           3     NA    NA    NA  
    

    【讨论】:

    • 显然 pivot_wider 有单独的内置...df %&gt;% tidyr::pivot_longer( Stim1_1:Stim3_3, names_to = c("Stim","Item"), names_prefix = "Stim", names_sep = "_" ) %&gt;% pivot_wider( names_from = Item, values_from = value, names_prefix = "Item" )
    • 好的,非常感谢!就是这样。我已经有一个包含数据的数据框(我在上面为 Stack Overflow 简化了它)所以我只是省略了 dplyr::tribble 部分,但除此之外它工作得很好。非常感谢,您为我节省了几个小时!
    猜你喜欢
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2022-01-23
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多