2015-11-17 67 views
0

初級問題來了,對不起......我有與結構如下數據集:重新排序的數據幀到基於行的名稱列[R

dat.1<-data.frame(id=c(1,1,1,2,2,2),test=c("test.1","test.2","test.3"),result=c(1,2,1,2,2,1)) 
dat.1 
    id test result 
1 1 test.1  1 
2 1 test.2  2 
3 1 test.3  1 
4 2 test.1  2 
5 2 test.2  2 
6 2 test.3  1 

實際數據集目前有32次測試,1000 < ID號碼,結果總是二進制的 - 測試數量可以增加,ID也會增加。我想重新安排數據,使每個測試即「test.1」有像這樣的列:

dat.3<-data.frame(id=c(1,2),test.1=c(1,2),test.2=c(2,2),test.3=c(1,1)) 
dat.3 
    id test.1 test.2 test.3 
1 1  1  2  1 
2 2  2  2  1 

這方面的一個小麻煩是,並非每一個ID已經發生了各項測試,所以任何解決方案將必須應付NA。只是在dat.3中澄清,測試的列內容是dat.1的結果列。

在據我已經得到了作爲創建一個「空」的數據幀,可以適應新的考驗的時刻被添加像這樣:

dat.2<-data.frame(id=c(1,2),test.1=c(NA,NA),test.2=c(NA,NA),test.3=c(NA,NA)) 
dat.2 
    id test.1 test.2 test.3 
1 1  NA  NA  NA 
2 2  NA  NA  NA 

我一直在嘗試與ifelse與IF的邏輯dat.1 $ id == dat.2 $ id & dat.1 $ test ==「test.1」then where dat.2 col = test.1,輸入dat.1 $ result in dat.3 $ test.1 - 如果這有什麼意義的話!可以預見,沒有任何運氣,感覺我錯過了一個非常明顯的步驟/過於複雜的事情,所以任何幫助將不勝感激 - 謝謝

編輯:感謝您的意見 - 重塑已開始有所幫助;不過,我認爲我試圖用上面的例子過度簡化。我已經把下方的新示例數據集:

dat.4<-data.frame(id=c(1,1,1,1,1,1,2,2,2),result=c(1,1,1,2,2,2,3,3,3), 
test=c("test.1","test.2","test.3"),result=c(1,2,1,2,2,2,2,2,1)) 
dat.1 
    id result test result.1 
1 1  1 test.1  1 
2 1  1 test.2  2 
3 1  1 test.3  1 
4 1  2 test.1  2 
5 1  2 test.2  2 
6 1  2 test.3  2 
7 2  3 test.1  2 
8 2  3 test.2  2 
9 2  3 test.3  1 

因此,每個ID(實際上是一個試樣ID)有其有合格的用於這項進一步測試的測試 - 此測試可具有單個或多個結果。因此,在最終的數據結構上面的例子是這樣的:

dat.3<-data.frame(id=c(1,1,2),result=c(1,2,3),test.1=c(1,2,2),test.2=c(2,2,2), 
test.3=c(1,2,1)) 
dat.3 
    id result test.1 test.2 test.3 
1 1  1  1  2  1 
2 1  2  2  2  2 
3 2  3  2  2  1 

所以真的是我要尋找基於兩個列條件重塑 - 這是否有道理?

+0

感謝。你可以根據兩列內容重塑嗎?在解決方案之前沒有預料到這個問題 - 將編輯原始問題進一步解釋 –

回答

1

看起來有點多進它 - 答案爲R手冊中(不知道我怎麼錯過了它) reshape manual

所以上面的例子中,

dat.2<-reshape(dat.1,idvar=c("id","result"),timevar="test",direction="wide") 

dat.2 
    id result result.1.test.1 result.1.test.2 result.1.test.3 
1 1  1    1    2    1 
4 1  2    2    2    2 
7 2  3    2    2    1