【问题标题】:How can I read a part of a dBase file如何读取 dBase 文件的一部分
【发布时间】:2014-10-03 10:10:00
【问题描述】:

我有一个非常大的 dBase 文件 (1.64Gb)。使用标准 foreign::read.dbf() 函数在 R 中加载整个文件需要很长时间。我只想在数据集中加载几个变量。有人有解决办法吗?

【问题讨论】:

    标签: r dbf dbase


    【解决方案1】:

    我认为foreign 包中的read.dbf(...) 函数用于读取shapefile 的*.dbf 部分,在这种情况下读取文件的一部分确实没有意义。你似乎想做一些不同的事情。

    使用RODBC可能会起作用,具体取决于您的系统配置方式。如果您运行的是 Windows,并且安装了 dBASE ODBC 驱动程序,这可能对您有用(注意:当您安装 MSOffice 时,它​​会设置一个名为“dBase Files”的用户 dsn,应该可以从 @987654325 访问@. 所以如果你安装了 MSOffice,这应该可以工作......)。

    重要提示:这仅在您运行 32 位版本的 R 时有效。这是因为没有 64 位 dBASE ODBC 驱动程序。通常,当您下载 64 位 R 时,您会同时获得 32 位和 64 位版本,因此只需在它们之间切换即可。

    library(RODBC)
    # setwd("< directory with your files >")
    conn <- odbcConnect(dsn="dBASE Files")
    df   <- sqlFetch(conn,"myTable",max=10)   # grab first ten rows
    head(df)
    #       LENGTH COASTLN010
    # 1 0.02482170          1
    # 2 0.01832134          2
    # 3 0.03117752          3
    # 4 0.04269755          4
    # 5 0.02696307          5
    # 6 0.05047828          6
    
    sqlQuery(conn,"select * from myTable where LENGTH<0.008")
    #       LENGTH COASTLN010
    # 1 0.00625200        186
    # 2 0.00634897        379
    # 3 0.00733319       1583
    # 4 0.00369786       1617
    # 5 0.00722233       1618
    # 6 0.00524176       1636
    

    上面的例子只是为了让你了解如何使用RODBC。在此示例中,我在“包含所有文件的目录”中有一个文件 myTable.dbf,并且此 dbf 有两列,LENGTHCOASTLN010(此文件实际上是海岸线 shapefile 的一部分,但那是无关紧要……)。

    如果这不起作用,请尝试:

     conn <- odbcConnectDbase("myTable.dbf")
    

    【讨论】:

    • odbcConnectDbase 不存在。你在哪里找到这个功能的?
    • 它在包RODBCodbcConnect(...) 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2016-08-09
    • 2015-05-17
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多