2014-10-03 55 views
3

我有一個非常大的dBase文件(1.64Gb)。使用標準的foreign::read.dbf()函數在R中加載整個文件需要很長時間。我想只加載數據集中的一些變量。有沒有人有辦法解決嗎 ?如何讀取dBase文件的一部分

回答

6

我認爲foreign包中的read.dbf(...)函數是用於讀取shape文件的*.dbf部分,在這種情況下,讀取部分文件確實沒有意義。你似乎想要做一些不同的事情。

使用RODBC威力工作,這取決於你的系統配置。如果您正在運行Windows,並且安裝了dBASE ODBC驅動程序,則可能適用於您(請注意:安裝MSOffice時,它會設置一個名爲「dBase文件」的用戶dsn,該文件應可從RODBC訪問。所以如果你安裝了MSOffice,這應該可以......)。

重要提示:這個如果你是因爲沒有64位的dBASE ODBC驅動程序運行R的32位版本,這隻會工作。一般來說,當你下載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") 
+0

'odbcConnectDbase'不存在。你在哪裏找到這個功能? – PAC 2014-10-06 13:20:01

+0

它在包'RODBC'中,以及'odbcConnect(...)'。 – jlhoward 2014-10-06 13:27:24

相關問題