长到宽w /两次重复测量

Tyl*_*ker 11 r

我知道这里有很多次在"长到宽"的标题下被问过,但是我遇到了一个情况,我有两个重复测量的值变量.

          id sex  time      score1    score2
1  subject 1   m Time1 -0.20926263 0.2499310
2  subject 2   m Time1  0.17147511 3.2708905
3  subject 3   m Time1 -0.82619584 0.5993917
4  subject 4   f Time1 -0.95568823 4.4729726
5  subject 5   f Time1 -2.29939525 8.0101254
6  subject 1   m Time2 -0.37914702 3.6387589
7  subject 2   m Time2  0.26759909 4.9027533
8  subject 3   m Time2  0.07727621 2.1848642
9  subject 4   f Time2 -0.08613439 5.8747074
10 subject 5   f Time2 -0.02743044 4.3963938
11 subject 1   m Time3  0.07176053 3.7959496
12 subject 2   m Time3  0.46463917 5.2494579
13 subject 3   m Time3 -0.68764512 2.2639503
14 subject 4   f Time3 -0.56670061 2.3361909
15 subject 5   f Time3  1.70731774 5.8345116
Run Code Online (Sandbox Code Playgroud)

快速重现数据帧(DF)的方法.

DF<-data.frame(id=rep(paste("subject", 1:5, sep=" "), 3),              
               sex=rep(c("m","m","m","f","f"), 3),                     
               time=c(rep("Time1",5), rep("Time2",5), rep("Time3",5)), 
               score1=rnorm(15), score2=abs(rnorm(15)*4))              
Run Code Online (Sandbox Code Playgroud)

我可以使用reshapebase中的函数解决两个测量重复测量变量的长到宽的问题,但我希望得到一个plyrreshape2/1答案,因为这些包对我来说通常更直观.如果您有任何其他解决方案,请继续提供,因为学习会很棒.

基地解决方案:

wide <- reshape(DF, v.names=c("score1", "score2"), idvar="id",         
                timevar="time", direction="wide")                      
wide   
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 12

我想这会做到:

library(reshape)
m <- melt(DF)
Run Code Online (Sandbox Code Playgroud)

最简单,但时间和分数与你的例子相反(如果重要的话)

cast(m,id+sex~...)
Run Code Online (Sandbox Code Playgroud)

或者更明确地说:

cast(m,id+sex~variable+time)
Run Code Online (Sandbox Code Playgroud)

你可以把它减少到单线:

recast(DF,id+sex~...)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以使用较新的reshape2包而不是reshape替换castdcast(recast包含的版本reshape2不能提供所需的结果.)