2012-03-15 8 views
35

मैं एक कारक के स्तर के आधार पर अलग data.frame ऑब्जेक्ट्स बनाने की कोशिश कर रहा हूं। तो अगर मेरे पास है:नए डेटा में किसी कारक के स्तर के आधार पर डेटा.फ्रेम विभाजित करें। फ्रेम

df <- data.frame(
    x=rnorm(25), 
    y=rnorm(25), 
    g=rep(factor(LETTERS[1:5]), 5) 
) 

कैसे मैं इसी x और y मूल्यों से युक्त g के प्रत्येक स्तर के लिए अलग data.frame रों में df विभाजित कर सकते हैं? मैं split(df, df$g) का उपयोग कर अधिकांश तरीकों से प्राप्त कर सकता हूं, लेकिन मैं कारक के प्रत्येक स्तर को अपना data.frame रखना चाहता हूं। ऐसा करने का सबसे अच्छा तरीका क्या है?

धन्यवाद।

+0

आप क्या 'विभाजन (df, df $ छ)' साथ कुछ गड़बड़ है व्याख्या कर सकते हैं? यह 'g' के प्रत्येक मान के लिए' data.frame की एक सूची देता है। –

उत्तर

70

मुझे लगता है कि split वही है जो आप चाहते हैं।

सूचना है कि एक्स डेटा फ्रेम की एक सूची, के रूप में str द्वारा देखा है:

X <- split(df, df$g) 
str(X) 

को समूह जी नाम के साथ अलग-अलग वस्तु चाहते हैं तो आप उन नामों की वस्तुओं के लिए split से एक्स के तत्वों आवंटित कर सकते हैं , हालांकि यह अतिरिक्त काम की तरह लगता है जब आप सूची split सूची से डेटा फ्रेम को इंडेक्स कर सकते हैं।

#I used lapply just to drop the third column g which is no longer needed. 
Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, 1:2]) 

#Assign the dataframes in the list Y to individual objects 
A <- Y[[1]] 
B <- Y[[2]] 
C <- Y[[3]] 
D <- Y[[4]] 
E <- Y[[5]] 

#Or use lapply with assign to assign each piece to an object all at once 
lapply(seq_along(Y), function(x) { 
    assign(c("A", "B", "C", "D", "E")[x], Y[[x]], envir=.GlobalEnv) 
    } 
) 

संपादित या lapply का उपयोग कर से भी बेहतर वैश्विक पर्यावरण के लिए आवंटित करने के लिए उपयोग करें list2env:

names(Y) <- c("A", "B", "C", "D", "E") 
list2env(Y, envir = .GlobalEnv) 
A 
+0

धन्यवाद। यह प्रत्येक 'data.frame' को अलग-अलग, अलग-अलग ऑब्जेक्ट्स में 'स्प्लिट' का उपयोग करके बनाया गया था जिसमें मुझे कठिनाई हो रही थी। यही वह है जिसकी तलाश में मैं हूं। – smillig

संबंधित मुद्दे