2015-11-04 65 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")