R 重塑为具有多个值的长列

R 重塑为具有多个值的长列,r,R,我知道在这个问题上有几个“重复”的线程,但我已经查看了它们,不知道如何让重塑来做我想做的事情 我有一个数据集,参与者参加两个测试,每个测试有两个问题(即问题1测试1、问题2测试1、问题1测试2、问题2测试2)。他们可以将问题正确或错误。我已将测试1的答案更改为0和1,因此更容易看到问题 df <- read.table(header = T, text = " subj Q1.test1 Q2.test1 Q1.test2 Q2.test2 1 0 1

我知道在这个问题上有几个“重复”的线程,但我已经查看了它们,不知道如何让
重塑
来做我想做的事情

我有一个数据集,参与者参加两个测试,每个测试有两个问题(即问题1测试1、问题2测试1、问题1测试2、问题2测试2)。他们可以将问题
正确
错误
。我已将测试1的答案更改为
0
1
,因此更容易看到问题

df <- read.table(header = T, text = "

subj Q1.test1 Q2.test1 Q1.test2 Q2.test2
 1        0        1    right    wrong
 2        0        1    wrong    wrong

")
然而,每当我尝试重新塑造它时,它不会产生我想要的数据帧

df.long <- reshape(df, direction = "long",
                    varying = c("Q1.test1", "Q2.test1", "Q1.test2", "Q2.test2"),
                    timevar = "question",
                    times = c("Q1", "Q2"),
                    v.names = c("test1", "test2"),
                    idvar = "subj")

df.long

subj question test1 test2
  1       Q1     0     1
  2       Q1     0     1
  1       Q2 right wrong
  2       Q2 wrong wrong

df.long以下是如何使用
tidyr
软件包完成此操作。注意:创建数据框时请使用
stringsAsFactors=FALSE
,否则会出现警告。我调用数据帧
df1

collect
从宽转换为长,
separate
将列名拆分为新列,并
spread
为每个测试创建带有值的列

比较
tidyr
重塑

library(tidyr)

df1 %>% 
  gather(Var, Val, -subj) %>% 
  separate(Var, sep = "\\.", into = c("question", "test")) %>% 
  spread(test, Val)
结果:

  subj question test1 test2
1    1       Q1     0 right
2    1       Q2     1 wrong
3    2       Q1     0 wrong
4    2       Q2     1 wrong
数据:

df1
  subj question test1 test2
1    1       Q1     0 right
2    1       Q2     1 wrong
3    2       Q1     0 wrong
4    2       Q2     1 wrong
df1 <- read.table(header = TRUE, 
                  text = "subj Q1.test1 Q2.test1 Q1.test2 Q2.test2
 1        0        1    right    wrong
 2        0        1    wrong    wrong", 
                   stringsAsFactors = FALSE)