2012-05-11 12 views
1

8列のデータフレーム(df)があります。forループを使用したdfの列の選択の相関

cor1=cor(df[,1], df[,2]) 
cor2=cor(df[,3], df[,4]) 

など:私は、列の選択については、以下の方法をピアソン相関を計算するforループを使用したいと思います。これを行う最善の方法は何ですか?

答えて

1

最も簡単にあなたが望むならば、あなたは、インデックス、それをすることができ、単に相関行列を計算することである:あなたが本当に

corMat[1,2] 

かの操作を行います、例えば

df <- data.frame(rnorm(10),rnorm(10),rnorm(10)) 
corMat <- cor(df) 

変数1と2の間の相関関係別々のオブジェクトに特定の相関関係を持たせる必要がありますか?

df <- data.frame(rnorm(10),rnorm(10),rnorm(10),rnorm(10)) 

for (i in seq(1,ncol(df),by=2)) 
{ 
    assign(paste("cor",i/2+0.5,sep=""),cor(df[,i],df[,i+1])) 
} 

それは非常に非効率的であるけれども:

編集ここ

は、あなたが何をしたいのforループの例です。

+0

Hallo Sascha、ご意見ありがとうございました。しかし、それは変数の各対の相関を計算するfor-loopでなければならない。 1)cor1 = cor(col1、col2)、cor2 = cor(col3、col4)など。 –

+1

なぜforループでなければならないのですか?これはRのプログラミングが非常に非効率的です。これが宿題の割り当てであれば、そのようにタグ付けしてください。とにかく、それを行う方法を編集しました。 –

0

あなたは一般的な機能でapplyを使用することができます。

df<-data.frame(a=rnorm(10),b=rnorm(10),c1=rnorm(10),d=rnorm(10)) 
f<- function(x) { 
    cc=x[1] #column index 
    if (cc<ncol(df)){ 
    cor(x[-1],df[,cc+1]) #ignore 1st element [-1] 
    } 
} 

apply(rbind(1:dim(df)[2], 2, f) #apply over columns after adding a column id numbers at the top row 

はR関数は関数を適用内側の列/行IDを取得することがあるかもしれませ?その場合、列IDをRbindする必要はありません。

関連する問題