2015-03-26 20 views
7

Sütunlardan birini kullanarak gruplara ayrılan 50 sayısal sütun içeren gruplanmış bir veri çerçevem ​​var (dplyr kullanarak). Tüm grup olmayan sütunlar ve belirli bir sütun arasındaki bir ilişki matrisi hesaplamak istiyorum.Dplyr içinde gruplandırılmış değişkenlerin korelasyon matrisi

mtcars veri kümesi ile bir örnek:

data(mtcars) 
cor(mtcars[,2:11], mtcars[,2]) 

kalyon başına mil ve diğer değişkenler arasındaki korelasyon bir listesini döndürür.

, ı silindirlerin her grup için aynı korelasyonu hesaplamak istediğinizi Ancak diyelim ör .:

library(dplyr) 
mtcars <- 
    mtcars %>% 
    group_by(cyl) 

Bunu nasıl yapardın? Ben

mtcars %>% 
    group_by(cyl) %>% 
    summarise_each(funs(cor(...)) 

gibi bir şey düşünüyorum Ama dplyr zincirindeki bir sütun belirtmek için nasıl bilmiyorum olarak ... koymak için bilmiyorum. İlgili

: Linear model and dplyr - a better solution? @ akrun cevabı çok benzer bir cevabı var. Ayrıca, üzerinde çapraz doğrulanmış: https://stats.stackexchange.com/questions/4040/r-compute-correlation-by-group, dplyr olmayan paketleri kullanan diğer çözümlere sahiptir.

cevap

8

do'u kullanabiliriz.

library(dplyr) 
mtcars %>% 
     group_by(cyl) %>% 
     do(data.frame(Cor=t(cor(.[,3:11], .[,3])))) 

NOT:t kısım @Alex

Ya

library(data.table) 
d1 <- copy(mtcars) 
setnames(setDT(d1)[, as.list(cor(.SD, .SD[[1]])) , cyl, 
          .SDcols=3:11], names(d1)[2:11])[] 
tarafından katkı sağlanmıştır