2010-12-02 8 views
9

प्रश्न के रूप में, मैंने पाया कि मैं स्क्लाइट शैल में .import का उपयोग कर सकता हूं, लेकिन ऐसा लगता है कि यह आर पर्यावरण में कोई सुझाव नहीं दे रहा है, कोई सुझाव?आरएसक्लाइट का उपयोग कर एसक्लाइट में सीएसवी कैसे आयात करें?

उत्तर

19

आप sqldf पैकेज में read.csv.sql का उपयोग कर सकते हैं। यह पढ़ने के लिए कोड की केवल एक पंक्ति है। मान लें कि आप एक नया डेटाबेस, testingdb बनाना चाहते हैं, और उसके बाद पढ़ने के लिए इसे में एक फ़ाइल इस प्रयास करें:

# create a test file 
write.table(iris, "iris.csv", sep = ",", quote = FALSE, row.names = FALSE) 

# create an empty database. 
# can skip this step if database already exists. 
sqldf("attach testingdb as new") 
# or: cat(file = "testingdb") 

# read into table called iris in the testingdb sqlite database 
library(sqldf) 
read.csv.sql("iris.csv", sql = "create table main.iris as select * from file", 
    dbname = "testingdb") 

# look at first three lines 
sqldf("select * from main.iris limit 3", dbname = "testingdb") 

ऊपर sqldf का उपयोग करता है जो RSQLite उपयोग करता है। आप सीधे RSQLite का उपयोग भी कर सकते हैं। RSQLite में ?dbWriteTable देखें। ध्यान दें कि लाइन एंडिंग के साथ समस्याएं हो सकती हैं यदि आप सीधे dbWriteTable के साथ ऐसा करते हैं कि sqldf स्वचालित रूप से (आमतौर पर) संभाल लेंगे।

आपका इरादा तुरंत डेटाबेस में इसे पढ़ने के बाद आर में फ़ाइल को पढ़ने के लिए गया था और तुम सच में उस के बाद डेटाबेस की जरूरत नहीं है, तो देखें:

http://code.google.com/p/sqldf/#Example_13._read.csv.sql_and_read.csv2.sql

+0

sqldf शानदार है! इस उत्तर को भी देखें http://stackoverflow.com/questions/4350131/unix-importing-large-csv-into-sqlite – Jay

+0

लेकिन यह सत्र के अंत में फ़ाइल को हटा देता है। इसे रखने का कोई तरीका? – xiaodai

+1

@xiaodai, sqldf उपरोक्त कोड में डेटाबेस या इनपुट फ़ाइल को नहीं हटाता है। sqldf यह बनाता है कि किसी भी डेटाबेस को हटा देता है लेकिन sqldf कभी भी इनपुट फ़ाइल को हटा देता है और कभी भी डेटाबेस को हटा देता है जो इसे नहीं बनाता है। इस मामले में डेटाबेस sqldf द्वारा स्वयं नहीं बनाया गया है (यह बैकएंड SQLite द्वारा 'संलग्न' कथन के माध्यम से बनाया गया है - फ्रंट एंड sqldf द्वारा नहीं) तो sqldf इसे हटा नहीं देगा। ध्यान दें कि sqldf डेटा फ्रेम के विज्ञापन में हेरफेर के लिए है, लेकिन यदि आप बुद्धिमान डेटाबेस को सौदा करते हैं तो आप सीधे RSQLite, RH2 या अन्य डेटाबेस इंटरफ़ेस पैकेज का उपयोग करना चाहेंगे। –

2

मुझे लगता है कि ऐसा करने के लिए sqldf पैकेज के साथ करते हैं: Quickly reading very large tables as dataframes in R

ध्यान रखें कि ऊपर के उदाहरण में मैं एक अस्थायी SQLite db में सीएसवी पढ़ें। आपको स्पष्ट रूप से उस बिट को बदलने की आवश्यकता होगी।

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