dplyr

2015-03-26 30 views
7

में समूहीकृत चर के सहसंबंध मैट्रिक्स में 50 अंकों वाले कॉलम के साथ समूहबद्ध डेटा फ्रेम (dplyr का उपयोग करके) है, जो स्तंभों में से किसी एक का उपयोग करके समूहों में विभाजित हैं। मैं सभी गैर समूह कॉलम और एक विशेष कॉलम के बीच सहसंबंध के एक मैट्रिक्स की गणना करना चाहता हूं।dplyr

mtcars डाटासेट के साथ एक उदाहरण:

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

गैलियन प्रति मील की दूरी पर और अन्य परिवर्तनों के बीच सह-संबंध की एक सूची देता है।

की लेकिन कहते हैं, कि मैं सिलेंडरों के प्रत्येक समूह के लिए यह एक ही सहसंबंध की गणना करना चाहते हैं करते हैं, उदा .:

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

मैं यह कैसे करना होगा? मैं

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

की तरह कुछ सोच रहा हूँ लेकिन मैं नहीं जानता कि क्या ... में डालने के लिए के रूप में मैं dplyr श्रृंखला में एक स्तंभ निर्दिष्ट करने के लिए कैसे पता नहीं है।

संबंधित: Linear model and dplyr - a better solution? एक जवाब है जो बहुत @ akrun के जवाब देने के लिए समान है। इसके अलावा, क्रॉस पर सत्यापित: https://stats.stackexchange.com/questions/4040/r-compute-correlation-by-group में पैकेज का उपयोग करने वाले अन्य समाधान हैं जो dplyr नहीं हैं।

उत्तर

8

हम do का उपयोग कर सकते हैं।

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

नोट:t हिस्सा @Alex

या

library(data.table) 
d1 <- copy(mtcars) 
setnames(setDT(d1)[, as.list(cor(.SD, .SD[[1]])) , cyl, 
          .SDcols=3:11], names(d1)[2:11])[] 
के योगदान है