Корреляция между двумя кадрами данных по строкам

У меня есть 2 кадра данных с 5 столбцами и по 100 строк.

id       price1      price2     price3     price4     price5
 1         11.22      25.33      66.47      53.76      77.42
 2         33.56      33.77      44.77      34.55      57.42
...

Я хотел бы получить корреляцию соответствующих строк, в основном

for(i in 1:100){    
cor(df1[i, 1:5], df2[i, 1:5])    
}

но без использования цикла for. Я предполагаю, что где-то использовать plyr, чтобы сделать это, но не может показаться, что это правильно. Любые предложения?

Ответ 1

В зависимости от того, хотите ли вы использовать крутое или быстрое решение, вы можете использовать

diag(cor(t(df1), t(df2)))

который является прохладным, но расточительным (потому что он фактически вычисляет корреляции между всеми строками, которые вам действительно не нужны, чтобы они были отброшены) или

A <- as.matrix(df1)
B <- as.matrix(df2)
sapply(seq.int(dim(A)[1]), function(i) cor(A[i,], B[i,]))

который делает только то, что вы хотите, но немного больше, чтобы печатать.

Ответ 2

Я обнаружил, что as.matrix не требуется.

Корреляции всех пар строк между кадрами данных df1 и df2:

sapply(1:nrow(df1), function(i) cor(df1[i,], df2[i,]))

и столбцы:

sapply(1:ncol(df1), function(i) cor(df1[,i], df2[,i]))

Ответ 3

после применения sapply к строкам и столбцам, как я могу экспортировать в CSV файл в матричном формате? Спасибо