2016-11-30 117 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