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



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

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

A
B

具有多种刺激和多种量表项目。我想将其作为一个长数据集,每个刺激都有自己的行,每个项目组成自己的列,类似于这样:

参与者刺激第1项第2项第3项

A 1
A 2
A3
B1
B2
B3

如果这有道理的话。我曾考虑使用pivot_langer,但这似乎为每个刺激和项目创建了一个新行,这样刺激1、项目1以及刺激1、2等都有自己的行。有什么方法可以做到这一点吗?

您使用pivot_langer是正确的。也许有一种更简单的方法可以用一个pivot_ider来完成这项工作,但我只是自己将其分解为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  

最新更新