2013-07-26 8 views
5

मेरे पास एक जटिल सूची है जिसमें अन्य सूचियां और डेटा फ्रेम शामिल हैं। मुझे केवल इस सूची को डेटा फ्रेम से शामिल करने के लिए सरल बनाना होगा - इसलिए प्रत्येक दूसरी स्तर की सूची अलग-अलग प्रथम स्तर के डेटा फ्रेम में बनाई जानी चाहिए।डेटा फ्रेम की सूची में सूचियों की जटिल सूची को बदलें

dd<-data.frame(x=1:3,y=4:6) 
l1<-list(dd,list(dd,dd)) 
#original list 
l1 
[[1]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

[[2]] 
[[2]][[1]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

[[2]][[2]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

परिणाम मैं

l2<-list(dd,dd,dd) 
l2 
[[1]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

[[2]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

[[3]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

पाने के लिए मैं समारोह unlist() और तर्क recursive=FALSE साथ लेकिन इस मामले प्रथम स्तर डेटा फ्रेम में करने की कोशिश की दो वैक्टर में बदल जाती है की जरूरत है:

यहाँ प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है ।

unlist(l1,recursive=FALSE) 
$x 
[1] 1 2 3 

$y 
[1] 4 5 6 

[[3]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

[[4]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

उत्तर

3

एक तरह से मैं के बारे में सोच सकता है अगर इनपुट के वर्ग (lapply चलाते समय) data.frame या list है की जाँच करने के लिए है, और अगर यह एक data.framedata.frame की एक सूची के लिए परिवर्तित। इसके परिणामस्वरूप संपूर्ण सूची डेटा.फ्रेम की सूची बन जाएगी।

unlist(lapply(l1, function(x) 
     if (class(x) == "data.frame") list(x) else x), recursive=FALSE) 
[[1]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

[[2]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

[[3]] 
    x y 
1 1 4 
2 2 5 
3 3 6 

बेशक यह काम करता है जब डेटा के रूप में आप वास्तव में उल्लेख है: तो फिर तुम इस प्रकार recursive=FALSE साथ unlist उपयोग कर सकते हैं। वे या तो डेटा की सूची हैं। डेटा या डेटा की सूची की सूची। फ्रेम। ओह और एसओ (पहला सवाल) में आपका स्वागत है! :)

+0

धन्यवाद! मैं विपरीत दिशा में हर समय सोच रहा था - सूची की सूची कैसे विभाजित करें। डेटा फ्रेम को डेटा फ्रेम में बदलने के लिए आइडिया बहुत अच्छा है। –

+0

मैं 'वर्ग (x) ==" data.frame "से बचने की कोशिश करता हूं और इसके बजाय' is.data.frame' का उपयोग करता हूं। – shadow

+0

यह सुनिश्चित नहीं है कि इसका उपयोग करने से बचने के लिए यहां क्या समस्या है। क्या आप विस्तारित कर सकते हैं? 'is.data.frame' आंतरिक रूप से 'विरासत' का उपयोग करता है और यह' data.frame' से प्राप्त वस्तुओं के लिए सत्य प्रदान करेगा। उदाहरण के लिए 'data.table' पर भी। यदि यह वांछनीय है, तो हाँ, 'विरासत' का उपयोग करना बेहतर है। – Arun

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