是否有用于将多列旋转到同一行的 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
我最近 运行 进行了一项实验,要求每个参与者为呈现我的数据的每个刺激填写一个量表,现在看起来像这样:
参加者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