2016-04-22 6 views
0

私はreshape2を使用してこれを行うことが分かっていますが、それはかなり遅く、私はこのようになりますdata.frameあります効率的にRのすべての列のX-Y data.frameを行列に変換します

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

あなたのタイトルが自分自身を説明しているかのように、単に「これ」を参照するのではなく、あなたがしたいことを記述する – Frank

+0

私の答えは、私が理解しているように問題を解決するより効率的な方法の1つだと思います。 – 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,]) 
} 
関連する問題