2012-02-03 8 views
10

Mam 2 ramki danych w/5 kolumn i po 100 wierszy.Korelacja R między 2 ramkami danych według wiersza

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 
... 

Chciałbym dostać korelację odpowiednich rzędach, w zasadzie

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

ale bez użycia pętli for. Zakładam, że jest jakiś sposób, aby użyć go do wykonania tej czynności, ale nie wydaje się, aby to naprawić. Jakieś sugestie?

Odpowiedz

20

W zależności od tego, czy chcesz chłodne lub szybkie rozwiązanie można użyć albo

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

który jest cool, ale rozrzutny (bo rzeczywiście oblicza korelacje pomiędzy wszystkich wierszy, które tak naprawdę nie potrzebują tak będą odrzucony) lub który robi tylko to, co chcesz, ale jest nieco więcej do wpisania.

+1

+1 To pierwsza jest cool. Również 't (as.matrix (df1))' może stać się 't (df1)', itd., Ponieważ przymus macierzy odbywa się niejawnie, gdy 't()' jest przekazywane przez element data.frame. –

+0

Ach, świetnie, dziękuję (to jest miejsce, w którym moje myślenie niskiego poziomu doprowadza mnie;)), będę edytować to –

+0

To zrobiło to. Dziękuję Ci bardzo. – screechOwl

4

Znalazłem, że as.matrix nie jest wymagane.

Korelacje wszystkich par wierszy między dataframes df1 i df2:

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

i kolumnach:

sapply(1:ncol(df1), function(i) cor(df1[,i], df2[,i])) 
Powiązane problemy