varias tablas seleccionar graficos graficas filas eliminar datos r matrix correlation

seleccionar - tablas en r



Correlaciones en filas en R (2)

Tengo dos matrices del mismo tamaño. Me gustaría calcular el coeficiente de correlación entre cada par de filas en estas matrices; fila 1 desde A con la fila 1 B, fila 2 desde A con fila 2 desde B, etc.

A <- matrix(runif(1:200), nrow=20) B <- matrix(runif(1:200), nrow=20)

Lo mejor que se me ocurre es

ret <- sapply(1:20, function(i) cor(A[i,], B[i,]))

pero es terriblemente ineficiente (las matrices tienen decenas de miles de filas). ¿Hay una manera mejor y más rápida?


Puede crear funciones vectorizadas que calcularán la covarianza y SD para usted, como

RowSD <- function(x) { sqrt(rowSums((x - rowMeans(x))^2)/(dim(x)[2] - 1)) } VecCov <- function(x, y){ rowSums((x - rowMeans(x))*(y - rowMeans(y)))/(dim(x)[2] - 1) }

Entonces, simplemente hazlo

VecCov(A, B)/(RowSD(A) * RowSD(B))


Esto debería ser rápido:

cA <- A - rowMeans(A) cB <- B - rowMeans(B) sA <- sqrt(rowMeans(cA^2)) sB <- sqrt(rowMeans(cB^2)) rowMeans(cA * cB) / (sA * sB)