[R] Correlate rows of 2 matrices

arun smartpink111 at yahoo.com
Mon Sep 23 05:05:34 CEST 2013


Hi,
You may try:
set.seed(49)
m1 = matrix(rnorm(30), nrow = 3)
m2 = matrix(rnorm(30), nrow = 3)
 corsP<-vector()
  for(i in 1:3) corsP[i] =  cor(m1[i,], m2[i,])
 corsP
#[1]  0.58411274 -0.02382329  0.03760757

diag(cor(t(m1),t(m2)))
#[1]  0.58411274 -0.02382329  0.03760757

#or
mNew<- rbind(m1,m2)
 indx<-rep(seq(nrow(mNew)/2),2)
 sapply(split(seq_len(nrow(mNew)),indx),function(x) cor(t(mNew[x,]),t(mNew[x,]))[2])
 #         1           2           3 
 #0.58411274 -0.02382329  0.03760757 
#or
tapply(seq_along(indx),list(indx),FUN=function(x) cor(t(mNew[x,]),t(mNew[x,]))[2])
 #         1           2           3 
 #0.58411274 -0.02382329  0.03760757 
A.K.






________________________________
From: Ira Sharenow <irasharenow100 at yahoo.com>
To: arun <smartpink111 at yahoo.com> 
Sent: Sunday, September 22, 2013 9:57 PM
Subject: Correlate rows of 2 matrices



Arun,

I have a new problem for you. 

I have two data frames (or matrices) and row by row I want to take the correlations.

So if I have a 3 row by 10 column matrix, I would produce 3 correlations.

Is there a way to merge the matrices and then use some sort of split?

Ideas/solutions much appreciated.

m1 = matrix(rnorm(30), nrow = 3)
m2 = matrix(rnorm(30), nrow = 3)

> set.seed(22)
> m1 = matrix(rnorm(30), nrow = 3)
> m2 = matrix(rnorm(30), nrow = 3)
> for(i in 1:3) corsP[i] =  cor(m1[i,], m2[i,])
> corsP
[1] -0.50865019 -0.27760046  0.01423144

Thanks.

Ira          



More information about the R-help mailing list