2012-02-25 116 views
4

我想使用reshape2軟件包將一些數據從long轉換爲wide,但是我收到了一個我無法解決的錯誤。在下面的例子中,我創建了一些與我的真實數據類似的假數據。我想將每個「主題」轉換爲包含該主題中所有「學分」總和的列,以獲得給定的「ID」編號。如何使用R中的reshape2包解決dcast錯誤?

library(reshape2) 

#創建假數據並把它變成一個數據幀

ID = rep(c(100,101,102,103), each=5) 
subj = rep(c("CHEM","ENGL","HIST","MATH"), 5) 
credits = rep(3, 20) 
df = data.frame(ID, subj, credits) 

#從長轉換爲寬,以「SUBJ」的值作爲新的列
#和的總和「信用」的值,每個「SUBJ」

df.wide = dcast(df, ID ~ subj, value.var=credits, fun.aggregate=sum) 

這裏就是我試圖讓當我運行dcast命令:

ID CHEM ENGL HIST MATH 
100  6  3  3  3 
101  3  6  3  3 
[and so on for each value of ID] 

這裏的錯誤我真正得到,當我運行上面的代碼:

Error in .subset2(x, i, exact = exact) : 
recursive indexing failed at level 2 

我得到同樣的錯誤,如果我從dcast呼叫中除掉「fun.aggregate = SUM」。

另外,如果我創建了值「信用」使用樣本()函數(而不是代表()),並調用dcast(不fun.aggregate = SUM),我收到以下錯誤:

Error in .subset2(x, i, exact = exact) : 
no such index at level 1 

我已經運行了什麼,據我所知,類似的dcast命令之前沒有問題。我猜我會打我的額頭,當我看到解決方案時大聲喊出「doh」,但我被卡住了。

回答

6

只要把學分引號:

df.wide = dcast(df, ID ~ subj, value.var="credits", fun.aggregate=sum) 
df.wide 
    ID CHEM ENGL HIST MATH 
1 100 6 3 3 3 
2 101 3 6 3 3 
3 102 3 3 6 3 
4 103 3 3 3 6 
+0

你能看看http://stackoverflow.com/questions/18882475/r-how-to-get-something-like-adjacency-matrix - 但是在十字路口值的/ 18883106#18883106並建議我一些修改? – andi 2013-09-18 22:04:00

相關問題