将宽数据转换为长格式以重复 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
目前我有这种“宽”格式的数据:
|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