将宽数据转换为长格式以重复 measures/mixed 模型

Convert wide data to long format for repeated measures/mixed models

目前我有这种“宽”格式的数据:

|Participant|Banana|Apple|Orange|
|-|-|-|-|
|P1|0|0|0|
|P2|1|1|1|
|P3|0|0|0|

理想情况下,我想将这些数据转换为混合模型的长格式,即

|Participant|Item|Accuracy|
|-|-|-|
|P1|Banana|0|
|P1|Apple|0|
|P1|Orange|0|
|P2|Banana|1|
|P2|Apple|1|
|P2|Orange|1|
|P3|Banana|0|
|P3|Apple|0|
|P3|Orange|0|

(由于某种原因,我的桌子坏了,抱歉,伙计们。)

重现代码

dat <- data_frame(
  Participant = paste0("P", 1:3),
  Banana = sample(0:1, 3, TRUE),
  Apple = sample(0:1, 3, TRUE),
  Orange = sample(0:1, 3, TRUE),
)

梳理了一些帖子,周围有一些零碎的答案,但我不能完全把它们放在一起:提取和拼接参与者并转置他们的行。

感谢您的帮助。

你可以试试

library(dplyr)
library(reshape2)

dat %>%
  melt %>%
  rename(., Accuracy = value, Item = variable) %>%
  arrange(Participant)


  Participant   Item Accuracy
1          P1 Banana        0
2          P1  Apple        1
3          P1 Orange        0
4          P2 Banana        1
5          P2  Apple        0
6          P2 Orange        1
7          P3 Banana        1
8          P3  Apple        1
9          P3 Orange        1

感谢@r2evans

melt(dat, variable.name = "Accuracy", value.name = "Item")

  Participant Accuracy Item
1          P1   Banana    0
2          P2   Banana    1
3          P3   Banana    1
4          P1    Apple    1
5          P2    Apple    0
6          P3    Apple    1
7          P1   Orange    0
8          P2   Orange    1
9          P3   Orange    1

dplyr

tidyr::pivot_longer(wide, -Participant, names_to = "Item", values_to = "Accuracy")
# # A tibble: 9 x 3
#   Participant Item   Accuracy
#   <chr>       <chr>     <int>
# 1 P1          Banana        0
# 2 P1          Apple         0
# 3 P1          Orange        0
# 4 P2          Banana        1
# 5 P2          Apple         1
# 6 P2          Orange        1
# 7 P3          Banana        0
# 8 P3          Apple         0
# 9 P3          Orange        0