2016-11-30 76 views
0

我對R很新,真的需要你的幫助,我的雙循環需要很多時間才能完成。優化R中太長的循環

data與659322行3列(ID,遊戲,金額)

重複每個ID數次(即幾個遊戲每個ID),但橫跨行不均勻分佈的數據表。我們可以有2個遊戲的ID1(所以ID1出現在2行),5個運動會ID2,4個遊戲的ID3等

我想從data創建矩陣datmat有:
- 鈮行= (nb_row = 46028)
ID的唯一值的NB - 遊戲的唯一值的列鈮= NB(nb_col = 30)
datmat填入相應的金額值

這裏就是我試過

ID <- unique(data$ID) 
Game <- unique(data$Game) 
nb_row <- length(ID) 
nb_col <- length(Game) 

datmat <- matrix(c(0),nb_row,nb_col,dimnames=list(NULL,Game)) 
for(i in 1:nb_row){ 
    for(j in 1:nb_col){ 
     datmat[i,j] <- data$Amount[data$ID==ID[i] & data$Game==Game[j]] 
    } 
} 
dt <- data.table(ID,datmat) 

任何建議,不勝感激。謝謝你們!

+1

還參見[這裏](http://stackoverflow.com/questions/9617348/reshape-three-column-data-frame-to -matrix-long-to-wide-format) –

+0

非常感謝! 'reshape'對我很好用 – Nala

回答

0

您可能需要使用重塑功能:

newdata<-reshape(data,timevar="Game",idvar="ID",direction="wide") 
+0

非常感謝! 'reshape'很好,但我需要重新排列數據幀,但仍然很棒! – Nala