是否有用于将多列旋转到同一行的 R 函数?

Is there an R function for pivoting multiple columns to the same row?

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

参加者Stim1_1Stim1_2Stim1_3Stim2_1Stim2_2Stim2_3Stim3_1Stim3_2Stim3_3

一个
B

具有多个刺激和多个量表项目。 我想调整它以使其成为一个长数据集,每个刺激都有自己的行,每个项目组成自己的列,如下所示:

参与者刺激 Item1 Item2 Item3

一个1
一个 2
一个 3
B 1
B 2
B 3

如果说得通。我正在考虑使用 pivot_longer,但这似乎为每个刺激和项目创建了一个新行,因此刺激 1、项目 1 以及刺激 1、项目 2 等都有自己的行。是有什么方法可以做到这一点?

您 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