2015-03-26 16 views
7

Ho un frame di dati raggruppato (utilizzando dplyr) con 50 colonne numeriche, che sono suddivise in gruppi utilizzando una delle colonne. Voglio calcolare una matrice di correlazione tra tutte le colonne non raggruppanti e una particolare colonna.Matrice di correlazione delle variabili raggruppate in dplyr

un esempio con il set di dati mtcars:

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

restituisce una lista delle correlazioni tra miglia per galeone e le altre variabili.

Diciamo però che desidero calcolare questo stessa correlazione per ogni gruppo di cilindri, ad es .:

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

Come faccio a fare questo? Sto pensando qualcosa di simile

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

Ma io non so cosa mettere nel ... come io non so come specificare una colonna nella catena dplyr.

correlate: Linear model and dplyr - a better solution? ha una risposta che è molto simile a @ di akrun risposta. Inoltre, su cross validated: https://stats.stackexchange.com/questions/4040/r-compute-correlation-by-group ha altre soluzioni che utilizzano pacchetti che non sono dplyr.

risposta

8

Potremmo usare do.

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

NOTA:t parte è un contributo di @alex

O

library(data.table) 
d1 <- copy(mtcars) 
setnames(setDT(d1)[, as.list(cor(.SD, .SD[[1]])) , cyl, 
          .SDcols=3:11], names(d1)[2:11])[] 
Problemi correlati