2016-09-04 9 views
0

Wie berechne ich Korrelationen zwischen einer Spalte und allen anderen Spalten in einem Datenrahmen in R ohne Verwendung von Spaltennamen? Ich versuchte ddply zu verwenden und es funktioniert, wenn ich nur zwei Spaltennamen verwenden, das heißtKorrelation zwischen Spalten nach Gruppe

library(plyr) 
ddply(iris, ~Species, summarize, cormat=cor(Sepal.Length,Petal.Width)) 

Aber wie Korrelationen der Spalte 1 mit allen anderen Spalten zu erhalten, aufgeschlüsselt nach Arten, ohne die Spaltennamen zu verwenden?

Antwort

1

Vielleicht so? Es erzeugt eine Korrelationsmatrix für jede Spezies.

by(iris[,1:4], iris$Species, cor)

+0

Vielen Dank! – gori73

0

Sie können dies tun, mit dplyr mit

library(dplyr) 
cormat_res <- iris %>% 
    group_by(Species) %>% 
    do(cormat = cor(select(., -matches("Species")))) 


> cormat_res[[2]] 
[[1]] 
      Sepal.Length Sepal.Width Petal.Length Petal.Width 
Sepal.Length 1.0000000 0.7425467 0.2671758 0.2780984 
Sepal.Width  0.7425467 1.0000000 0.1777000 0.2327520 
Petal.Length 0.2671758 0.1777000 1.0000000 0.3316300 
Petal.Width  0.2780984 0.2327520 0.3316300 1.0000000 

[[2]] 
      Sepal.Length Sepal.Width Petal.Length Petal.Width 
Sepal.Length 1.0000000 0.5259107 0.7540490 0.5464611 
Sepal.Width  0.5259107 1.0000000 0.5605221 0.6639987 
Petal.Length 0.7540490 0.5605221 1.0000000 0.7866681 
Petal.Width  0.5464611 0.6639987 0.7866681 1.0000000 

[[3]] 
      Sepal.Length Sepal.Width Petal.Length Petal.Width 
Sepal.Length 1.0000000 0.4572278 0.8642247 0.2811077 
Sepal.Width  0.4572278 1.0000000 0.4010446 0.5377280 
Petal.Length 0.8642247 0.4010446 1.0000000 0.3221082 
Petal.Width  0.2811077 0.5377280 0.3221082 1.0000000 
+0

Wenn ich es nur in R kopiere, gibt es einen Fehler. Könnten Sie bitte etwas mehr erklären? Was ist%>%? Ich bin nicht so gut mit R. – gori73

+0

Sorry, ich habe Ihre Frage falsch gelesen und schrieb eine Lösung in [dplyr] (https://cran.r-project.org/web/packages/dplyr/), eine neuere Version von plyr – Stedy

Verwandte Themen