2011-12-19 28 views
1

私は以下のようなデータセットを持っています。R - 列サブセット間の相関 - 現在の参照行

 name  Exp1Res1 Exp1Res2 Exp1Res3 ExpRes1 Exp2Res2 Exp3Res3 

[1]  ID1   5   7   9   7   9  2 

[2]  ID2   6   4   2   9   5  1 

[3]  ID3   4   9   9   9   11  2 

各行の実験1と2の相関関係を調べる必要があります。私のデータセット(FullSet)に実際に37列と100000行があるので、私のオリジナルのループスルーの解決策は非常に遅いです(下記参照)。私は最適化したかったのです。

私の元の解決策は、

df <- data.frame(matrix(ncol = 5, nrow = dim(FullSet)[1])) 
names(df)<-c("ID","pearson","spearman") 
for (i in seq(1, dim(FullSet)[1])) 
{ 
    pears=cor(as.numeric(t(FullSet[i,2:19])),as.numeric(t(FullSet[i,20:37])), method="pearson") 
    spear=cor(as.numeric(t(FullSet[i,2:19])),as.numeric(t(FullSet[i,20:37])), method="pearson") 
    df[i,]<-c(FullSet[i,1],pears,spear) 
} 

私はこれがうまくいくと感じます。

FullSet$pearson<-cor(as.numeric(t(FullSet[,2:19])),as.numeric(t(FullSet[,20:37])), method="pearson") 

が、転置でちょうど現在の行を参照するように/どの場合、私は知らない -

t(FullSet[,2:19]) - which should read something like t(FullSet[<currow>,2:19]). 

ヘルプは高く評価されるだろう - 私のアプローチはしても正しいかどうかはわかりません。

出力(結果が正しくない - 例のみのため)のようになります

 name  Pearson  Spearman 

[1]  ID1   0.8   .75 

[2]  ID2   0.9   .8 

[3]  ID3   0.85   .7 

答えて

4

どのような形式にそれを持ち込むについて:reshapeを使用して

ID EXP Res 
1 1 . 
1 1 . 
1 2 . 
1 2 . 

してから作業を行うplyrをさせます:

require(plyr) 
ddply(df, .(ID, EXP), summarize, cor(...)) 

この可能性はありますか?あなたがスピアマンとペーザスのために別々に行うならば。

+0

私はこれが答えとしてマークされています。これは代替であり(ちょうど溶けていますが)、ループメソッドより速くはありません。 – statler

関連する問題