2015-11-04 60 views
1

我想重新使用兩列值作爲新數據集的列,將我的數據集重新整形,這些數據集從長到短丟失數據。這裏有一個例子:使用兩列的值和丟失的數據重塑數據集

ID Survey Question Response 
1  1   1   1 
1  1   2   2 
1  2   1   3 
1  2   2   
1  2   3   4 
1  3   1   3 
1  3   2   4 
2  1   1   2 
2  1   2   
2  2   1   6 
2  2   2   2 
2  2   3   3 
2  3   1   
2  3   2   5 

我希望它看起來像這樣

ID Survey1.Q1 Survey1.Q2 Survey2.Q1 Survey2.Q2 Survey2.Q3 Survey3.Q1 Survey3.Q1 
1   1   2   3      4   3   4 
2   2      6   2   3      5 
+1

你可以添加示例數據的dput()嗎?你有沒有試過?爲什麼它不起作用?是否有你需要這種格式的特定原因?這不是很「整潔的數據」。 – Heroka

+1

嘗試'庫(dcast); dcast(df1,ID〜Survey + Question,value.var ='Response')'我想對於這個例子,我得到了你所期望的結果。 – akrun

+1

@akrun感謝您的幫助!我仍然堅持在這個問題上,而不是所有的列都是數字類型,Survey和Question是因素,Response是數字。 – user2105555

回答

6

或者你可以選擇,而鑄造(感謝@Pierre)

res <- dcast(ID~paste0("Survey",Survey)+paste0("Q",Question), 
    value.var="Response",data=dat) 
3

reshape()格式化資料從{stats}

d <- read.table(header=TRUE, text= 
'ID Survey Question Response 
1  1   1   1 
1  1   2   2 
1  2   1   3 
1  2   2   NA 
1  2   3   4 
1  3   1   3 
1  3   2   4 
2  1   1   2 
2  1   2   NA 
2  2   1   6 
2  2   2   2 
2  2   3   3 
2  3   1   NA 
2  3   2   5') 
d$t <- 10*d$Survey+d$Question 
reshape(d[,-(2:3)], dir="wide", timevar="t", idvar="ID")