2016-04-22 57 views
0

我已經找到了使用reshape2來完成此操作的過程,但它非常緩慢,並不完全給我我想要的東西。我有一個data.frame,看起來像這樣:將X-Y data.frame轉換爲R中每一列的矩陣有效

df<-data.frame(expand.grid(1:10,1:10)) 
colnames(df) <- c("x","y") 

for(i in 3:10){ 
df[i] <- runif(100,10,100) 
} 

我運行:

require(reshape2) 

matrices<-lapply(colnames(df)[-c(1:2)],function(x){ 
    mat<-acast(df, y~x, value.var=x, fill= 0,fun.aggregate = mean) 
    return(mat) 
}) 

那裏我有矩陣對我的數據的每個值向量的列表,我可以將其轉化成一個數組爲1:10,1:10,1:10的維度,但我期待着看看是否有更快的方法來做到這一點,因爲我的數據集可以包含很多值列,這個過程可能需要很長時間,我不能似乎找到一個更有效的方式做它..

感謝您的任何幫助。

+0

看看'dcast'在'數據.table'包。它通常比'reshape2'更高效。 –

+0

描述你想做什麼,而不是簡單地引用「this」就好像你的標題解釋自己 – Frank

+0

我認爲我的答案是解決問題的更有效方法之一,據我瞭解。 – lmo

回答

0

如果像你說你的data.frame定期存儲,你可以在一個for循環,這實際上可能比鑄造更快實現這一點:

# preallocate array 
myArray <- array(0, dim=c(10,10,10)) 

# loop through: 
for(i in 1:10) { 
    myArray[,,i] <- as.matrix(df[df$y==i,]) 
}