2017-07-20 6 views
1

私は450.000列と660行を持つデータセットを持っています。最初の330行はグループ "A"で、最後の330グループ "B"です。私はこれまでのところ、私が管理し、グループAとグループB1列の2つのグループ間の相関

間の列ごとの相関関係を計算したいと思います:私の最初の列には2つのグループ間の相関関係を返し

setkey(df, group) 
cor(df["A"]$value, df["B"]$value) 

を。

しかし、これは、新しいデータフレームで450.000列のすべての列に適用され、列名と2つのグループ間の相関関係があります。

group A(行1)の最初の行がgroup B(行331)の最初の行に関連していることを考慮する必要があります。グループAの2番目はグループBの2番目行332)、等々。

ここで誰もRでこれを達成する方法を知っていますか?

ありがとうございます。

答えて

0

すべての列をループして試してください。

df<-data.frame(a1=rnorm(660),a2=rnorm(660)) 
cordf<-numeric() 
for(i in 1:ncol(df)){cordf[i]<-cor(df[1:330,i],df[331:660,i])} 
names(cordf)<-names(df) 

codefには最初の330行と最後の330行の間の相関が含まれ、データフレームの元の変数名の名前が付けられます。

+0

あなたは使用するつもりなら'for 'ループの場合、' cordf'に必要なメモリ、 'cordf bouncyball

+0

良い提案です。ありがとう。 – alex2006

+0

答え@ alex2006と追加の提案バウンスボールありがとうございます。私は相関を得ることができましたが、この構文でも行1と331,2、および332 ...が互いに関係しているかどうかはわかりません。それとも? – Silv

2
# sample data 
df = data.frame(a=runif(660,1,10),b=runif(660,1,10),c=runif(660,1,10)) 

data.frame(corr=sapply(df,function(x) {cor(x[1:330],x[331:nrow(df)])})) 

出力:ここ

  corr 
a -0.05902668 
b 0.03443904 
c -0.09899892 
+0

ありがとう、私は私の答えを変更し、私はそれが悪い習慣とみなされる理由についての詳細情報を見つけようとします。 – Florian

+0

基本的に 'apply'はデータフレームを最初に行列に変換します。あなたは多くの情報[ここ]を見つけることができます(https://stackoverflow.com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega ) – Sotos

1

purrrソリューションです。 map_dfはデータフレームを返します。

サンプル・データ:すべての列で

df<-data.frame(a1=rnorm(660,50,20),a2=rnorm(660,50,20)) 

そして、グループ間の相関関係(AとB):

library(purrr) 
map_df(df, ~{cor(.[1:330],.[331:660])}) 

戻り

# A tibble: 1 × 2 
#   a1   a2 
#  <dbl>  <dbl> 
#1 -0.09949217 -0.008308669 
関連する問題