2011-11-19 8 views
11

これは長い間広い意味でここに何度も尋ねられてきましたが、私は反復的な2つの値の変数がある状況に遭遇しました。2回繰り返された長時間の幅広い

  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 

データフレーム(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))    

私はベースからreshape機能を使用して測定された2つの反復測定変数の広いに長いの問題を解決することができますが、これらのパッケージは、一般的にはるかに直感的に私にあるように私は、plyrまたはreshape2/1答えを期待していました。あなたが他の解決策を持っていれば、学習は素晴らしいものになるので、それらを提供してください。ベースから

ソリューション:

wide <- reshape(DF, v.names=c("score1", "score2"), idvar="id",   
       timevar="time", direction="wide")      
wide 
+1

?私は、近い(「話題から外れた」)投票が何であったのか見ていない...? –

+1

ベンはそのような小さなコードで形を変えてそれを打ちました。私は他の方法(非常に/ data.tableなどでこれを行うかどうかわからない) –

答えて

12

私はこれはそれを行うだろうと思う:

library(reshape) 
m <- melt(DF) 

最も簡単な、しかし時間とスコアはあなたの例とは逆の順序である(場合には、それが重要)

cast(m,id+sex~...) 

さらに明示的には、

cast(m,id+sex~variable+time) 

あなたはワンライナーにこれを削減することができます

recast(DF,id+sex~...) 

あなたがreshapeの代わりに、新しいreshape2パッケージを使用することができるような場合、dcastreshape2 doesnの中に含まrecastのバージョンでcastを置き換えます希望の結果を出してください。)

+0

完璧です。学習機会に感謝します。 –

2

この質問は尋ねられた日を考慮すると素晴らしいです。ただし、より新しいバージョンの "data.table"に含まれているdcast関数は、データを最初にmeltする必要なく、このような問題を処理できます。したがって、これはより効率的なアプローチになります。

library(data.table) 
dcast(as.data.table(DF), id + sex ~ time, value.var = c("score1", "score2")) 
##   id sex score1_Time1 score1_Time2 score1_Time3 score2_Time1 score2_Time2 score2_Time3 
## 1: subject 1 m 0.78213630 -0.1557955 -0.10278773 1.5771598  1.013447 1.4583278 
## 2: subject 2 m 0.07456498 -1.4707524 0.38767161 0.2372536  2.787854 3.0741317 
## 3: subject 3 m -1.98935170 -0.4781501 -0.05380504 4.4001015  2.226653 0.4493848 
## 4: subject 4 f 0.61982575 0.4179416 -1.37705956 3.0527030  2.755023 3.5244309 
## 5: subject 5 f -0.05612874 1.3586796 -0.41499456 0.6580944  2.829981 1.5924235 
関連する問題