2014-09-21 9 views
5

मैं एक नेस्टेड सूची है कि इस तरह दिखता है के लिए पंक्ति बनाने की ही पंक्ति में नेस्टेड सूची सपाट:as.data.frame बजाय प्रत्येक रिकॉर्ड

mylist <- vector("list", 2) 
mylist[[1]]$name <- "The Tucson IOT Meetup Group" 
mylist[[1]]$state <- "AZ" 
mylist[[2]]$name <- "#SFMySQL Meetup" 
mylist[[2]]$state <- "CA" 

mylist 
[[1]] 
[[1]]$name 
[1] "The Tucson IOT Meetup Group" 

[[1]]$state 
[1] "AZ" 


[[2]] 
[[2]]$name 
[1] "#SFMySQL Meetup" 

[[2]]$state 
[1] "CA" 

मैं के साथ एक डेटा फ्रेम में इस चालू करना चाहते हैं कॉलम "नाम" और "राज्य" और दो पंक्तियां, प्रत्येक रिकॉर्ड के लिए एक। लेकिन जब मैं as.data.frame उपयोग करने के लिए यह करने के लिए प्रयास करते हैं, मैं वापस आ गया डेटा की एक पंक्ति, रिकॉर्ड 'चर से प्रत्येक के लिए अलग-अलग कॉलम के साथ मिलता है, इस तरह:

myframe <- as.data.frame(mylist) 
myframe 
           name state   name.1 state.1 
1 The Tucson IOT Meetup Group AZ #SFMySQL Meetup  CA 

मैं सुनिश्चित नहीं हूं क्या हो रहा है। ऐसा करने का सही तरीका क्या है?

उत्तर

4
do.call(rbind.data.frame, mylist) 
##       name state 
## 2 The Tucson IOT Meetup Group AZ 
## 21    #SFMySQL Meetup CA 

do.call समारोह कुछ हद तक (l/s) की तरह है कार्यों को लागू करने और कार्य लगातार कॉल के परिणाम जमा करने के लिए अनुमति देता है।

Reduce(rbind.data.frame, mylist) 
##       name state 
##2 The Tucson IOT Meetup Group AZ 
##21    #SFMySQL Meetup CA 

तुम भी प्राप्त कर सकते हैं rbindReduce साथ "काम" करने के लिए: Reduce समारोह कभी कभी एक ही परिणाम पूरा करता

Reduce(rbind, mylist) 
##  name       state 
##init "The Tucson IOT Meetup Group" "AZ" 
##  "#SFMySQL Meetup"    "CA" 

शुरू में सोचा था कि सबसे अच्छा परिणाम हो सकता है। (मैं ऐसे परिणाम पसंद करता हूं जो कारकों के बजाए चरित्र मूल्य प्रदान करते हैं।) हालांकि, स्ट्रस() के साथ देखे जाने पर दोनों दृष्टिकोण कम करने के बजाय अजीब संरचनाएं प्रदान करते हैं।

+0

निश्चित रूप से काम करता है कि कोशिश करते हैं। क्या कर रहा है क्यों rbind (mylist) काम नहीं करेगा? – Traviskorte

+1

'mylist' एक वेक्टर या मैट्रिक्स नहीं है इसलिए' rbind.default' काम नहीं करता है और कोई 'rbind.list' –

+0

नहीं है जिसके परिणामस्वरूप '' row.names'' अजीब हैं (ऊपर में 21), लेकिन मैं मान लीजिए कि यह हानिरहित है और इसके अलावा, हम हमेशा उन्हें '' NULL' सत्यापित कर सकते हैं ... – PatrickT

3

या data.table रों rbindlist समारोह (बड़ा डेटा सेट के लिए बहुत ही कुशल)

library(data.table) 
rbindlist(mylist) 
#       name state 
# 1: The Tucson IOT Meetup Group AZ 
# 2:    #SFMySQL Meetup CA 
संबंधित मुद्दे