如何读取dBase文件的一部分

时间:2014-10-03 10:10:00

标签: r dbf dbase

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

1 个答案:

答案 0 :(得分:7)

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

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

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

RODBC

上面的示例只是为了让您了解如何使用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,这个dbf有两列,myTable.dbfLENGTH(这个文件实际上是一个列的一部分)海岸线shapefile,但这无关紧要......)。

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

COASTLN010