2010-12-02 16 views

Respuesta

19

Puede usar read.csv.sql en el paquete sqldf. Es solo una línea de código para hacer la lectura. Suponiendo que desea crear una nueva base de datos, testingdb, y luego leer un archivo en él intente esto:

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

Lo anterior sqldf utiliza que utiliza RSQLite. También puede usar RSQLite directamente. Ver ?dbWriteTable en RSQLite. Tenga en cuenta que puede haber problemas con los finales de línea si lo hace directamente con dbWriteTable que sqldf manejará automáticamente (generalmente).

Si su intención era leer el archivo en R inmediatamente después de leerlos en la base de datos y que realmente no necesita la base de datos después de que a continuación, ver:

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

+0

sqldf es fantástico! Consulte también esta respuesta http://stackoverflow.com/questions/4350131/unix-importing-large-csv-into-sqlite – Jay

+0

, pero elimina el archivo al final de la sesión. cualquier forma de mantenerlo? – xiaodai

+1

@xiaodai, sqldf no elimina la base de datos o el archivo de entrada en el código anterior. sqldf elimina cualquier base de datos que crea, pero sqldf nunca elimina el archivo de entrada y nunca elimina las bases de datos que no crea. En este caso, la base de datos no es creada por sqldf en sí (es creada por el SQLite de backend a través de la declaración 'attach', no por el front-sqldf) por lo que sqldf no lo eliminará. Tenga en cuenta que sqldf está destinado a la manipulación ad hoc de marcos de datos, pero si se trata de bases de datos persistentes, entonces es posible que desee utilizar RSQLite, RH2 u otro paquete de interfaz de base de datos directamente. –

Cuestiones relacionadas