2012-02-22 12 views
0

因子名A、B、C、D、E(それらはcol名とrownamesとして設定されています)の相関行列(Corr)を持っています。行列の要素をRに取得

Factor1、Factor2、Corrの形式でデータフレームを作成したいので、データベースに保存できます。

私はsqldfを使用して、以下のクエリを使用してこれらの要素のすべての組み合わせを取得しています。

SELECT a.Factor as FactorA, 
     b.Factor as FactorB 
FROM Factors a cross JOIN Factors b 
WHERE a.Factor>b.Factor 

私はちょうど5C2行を持っています。

ここでは、この結果を使用して相関行列の列名と行の名前を検索し、関連する相関係数を取得します。反復を避けるために関数を適用する方法はありますか?

データフレームは、私は任意の助けを本当に感謝

FactorA、FactorB、コアー[FactorA、FactorB]

のようになります。..ときG.Grothendieck答え@

+0

私は理解できると思いますが、最小限の再現可能な例を提供するかどうかははるかに簡単です。 –

+0

http://stackoverflow.com/questions/6782070とhttp://stackoverflow.com/questions/7074246の近くに重複しています。 – Aaron

答えて

0
df <- expand.grid(colnames(Corr), rownames(Corr)) 
df$Corr <- apply(df, 1, function(x) Corr[ x[1], x[2] ]) 
Ltri <- lower.tri(Corr) 
df[ Ltri , ] # the lower triangular data 

# I used the longley dataset and the second example on the `cor` help page to test 
# (Corr <- cor(longley)) 

は同様に一般的に起こります質問は、彼の答えは私よりも魅力的です。この場合、要素から数値インデックスを回復する必要があるという事実から少しIMOに苦しんでいます。一方、upper.triまたはlower.triを使用すると、私はいつもちょっと心配しています。なぜなら、それらは "["でインデックスとして使用するまで要素を返さないため、非常に直感的ではないようです。私たちのどちらかが行(Corr)> col(Corr)を同じ効果に使用していた可能性があり、私の考え方には明らかになっていました。

代替選択:

df[ row(Corr) > col(Corr) , ] 
subset(as.data.frame.table(Corr), row(Corr) > col(Corr)) 
+0

完全に動作します。感謝万円!! – user1042267

2

1)Corrがあなたの相関行列、例えばここでこれを試してみてくださいCorr <- cor(iris[-5])

library(sqldf) 
DF <- as.data.frame.table(Corr) 
sqldf("select * from DF where Var1 > Var2") 

EDIT:sqldfが使用されているに加えた溶液

subset(as.data.frame.table(Corr), as.numeric(Var1) > as.numeric(Var2)) 

2)あなたはこれを試して、その後sqldfを使用したい場合。

関連する問題