2010-12-02 12 views

cevap

19

sqldf paketinde read.csv.sql'u kullanabilirsiniz. Okumak için sadece bir kod satırı. İçine bir dosya, bu deneyin ardından okumak Yeni bir veritabanı, testingdb oluşturmak istediğiniz varsayarsak, ve:

# 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") 

yukarıda RSQLite kullandığı sqldf kullanır. RSQLite'yi doğrudan da kullanabilirsiniz. RSQLite'de ?dbWriteTable'a bakın. dbWriteTable ile sqldf'un otomatik olarak (genellikle) işleyeceği doğrudan doğruya satır sonlarında sorun olabileceğini unutmayın.

Niyetiniz hemen veritabanına okuduktan sonra R dosyayı okumak ve eğer gerçekten bundan sonra veritabanını gerekmiyorsa o zaman bakın:

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

+0

sqldf harika! Bu cevaba da bakın http://stackoverflow.com/questions/4350131/unix-importing-large-csv-into-sqlite – Jay

+0

, ancak oturumun sonunda dosyayı siler. Onu tutmak için herhangi bir yol? – xiaodai

+1

@xiaodai, sqldf yukarıdaki kodda veritabanı veya giriş dosyasını silmez. sqldf oluşturduğu herhangi bir veritabanını siler ama sqldf hiçbir zaman giriş dosyasını silmez ve yaratmadığı veritabanlarını silmez. Bu durumda veritabanı sqldf tarafından oluşturulmamıştır (onun backend SQLite tarafından yaratılan 'attach' ifadesiyle - ön uç sqldf tarafından değil) bu yüzden sqldf onu silmez. Sqldf'in veri çerçevelerinin ad hoc manipülasyonu için tasarlandığını, ancak kalıcı veritabanları ile ilgileniyorsanız, doğrudan RSQLite, RH2 veya diğer veritabanı arayüz paketlerini kullanmak isteyebilirsiniz. –

İlgili konular