2012-10-11 108 views
-2

我想访问和处理R中的一个大型数据集。由于它是一个很大的CSV文件(〜0.5 GB),我打算将它导入到SQLite中,然后从R中访问它。知道sqldfRSQLite包可以做到这一点,但我去 他们的手册,他们没有帮助。作为SQL的新手也无济于事。访问R中的SQLite数据库

我想知道我必须将R目录设置为SQLite的,然后从那里去?那么我如何读取R中的数据库呢? 哎呀,如果你知道如何在不使用SQL的情况下从R访问数据库,请告诉我。

谢谢!

回答

7

它确实很简单 - sqlite db文件的路径和文件名作为'database'参数传递。这里是CRANberries所做的:

databasefile <- "/home/edd/cranberries/cranberries.sqlite" 

## ... 

## main worker function 
dailyUpdate <- function() { 
    stopifnot(all.equal(system("fping cran.r-project.org", intern=TRUE), 
         "cran.r-project.org is alive")) 
    setwd("/home/edd/cranberries") 
    dbcon <- dbConnect(dbDriver("SQLite"), dbname = databasefile) 
    repos <- dbGetQuery(dbcon, 
         paste("select max(id) as id, desc, url ", 
           "from repos where desc!='omegahat' group by desc") 
    # ... 

这就是所有的东西。当然,还有其他疑问稍后...

您可以轻松地从R.

编辑来自R尝试,或试图直接之前测试中SQLite的客户端的所有SQL查询:由于以上显然太简洁了,下面是直接从文档中获得的示例:

con <- dbConnect(SQLite(), ":memory:")   ## in-memory, replace with file 
data(USArrests) 
dbWriteTable(con, "arrests", USArrests) 

res <- dbSendQuery(con, "SELECT * from arrests") 
data <- fetch(res, n = 2) 
data 

dbClearResult(res) 
dbGetQuery(con, "SELECT * from arrests limit 3") 
+0

好的。首先,我必须将CSV文件导入SQLite,对吧?然后CSV文件变成一个.sqlite文件。那么R如何知道在.sqlite文件中读取哪里?如果你正在给出一个解决方案,那么至少写你的代码的评论,而不是把它转储给其他人。谢谢。 – Dombey

+0

你必须提供一个sqlite数据库,如何创建那些覆盖在sqlite文档(这是相当不错的)。看看上面如何使用变量'databasefile' - 就像我写的那样。 –

+1

@GTyler:哈哈!如果你要求免费的帮助,那么至少应该表现出欣赏而不是批评他们没有提供最好的答案。谢谢。 ;-) –