簡體   English   中英

如何用R中的reshape2包解決dcast錯誤?

[英]How to resolve dcast error with reshape2 package in R?

我正在嘗試使用reshape2包將一些數據從long轉換為寬,但是我收到的錯誤是我無法解決的。 在下面的示例中,我創建了一些與我的真實數據類似的虛假數據。 我想將每個“subj”轉換為一個列,該列包含該主題中給定“ID”號碼的所有“信用”的總和。

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)

#從long轉換為wide,將“subj”的值作為新列
#和“credit”之和作為每個“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”,我會得到同樣的錯誤。

另外,如果我使用sample()函數(而不是rep())創建“credits”的值,並調用dcast(沒有fun.aggregate = sum),我會收到以下錯誤:

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

據我所知,我已經運行了類似的dcast命令,之前沒有問題。 當我看到解決方案的時候,我猜我要打我的額頭並喊“doh”,但我被卡住了。

只需將信用放在引號中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM