2013-07-03 105 views
1

我有一個.dbf格式的數據集並需要將它導入到R. 我之前沒有使用這種擴展,所以不知道如何將具有多個表的dbf文件導出爲不同的格式。加速R中的read.dbf(導入大型dbf文件時出現問題)

簡單的read.dbf已經運行了幾個小時,仍然沒有結果。 試圖尋找加速R性能,但不知道是否是這種情況,認爲這個問題是在閱讀大型dbf文件本身(權重〜1.5Gb)後面,即命令本身一定是不高效的。但是,我不知道如何處理這種數據集格式。 是否有任何其他選項可導入dbf文件?

P.S. (NOT R ISSUE)dbf文件的來源使用visual foxpro,但不能將其導出爲其他格式。我已經安裝了foxpro,但鑑於我以前從未使用過它,我不知道如何以正確的方式導出它。嘗試簡單的「導出到類型= XLS」命令,但這裏出現了一個編碼問題,因爲大多數變量都是俄文西里爾文,不能由Excel解密。此外,dbf文件包含多個表,這些表應該合併到一個大表中,但我不知道如何將這些表單獨導出到xls,因爲我不知道如何將多個表單導出爲xls或csv,或如何將它們合併在一起,因爲我是絕對新的dbf文件主題(雖然已經查看基本描述已經)

任何幫助將不勝感激。不知道我是否可以提供樣本數據集,因爲在foxpro中查看dbf時有許多列,而且這些列必須與來自同一個dbf文件的其他表合併,並且不知道如何實現。 (對不起,亂七八糟)

+0

你正在使用哪個軟件包? 'foreign'? – agstudy

+2

將每個表單獨導出到csv可能會更容易,然後將它們讀入R.我沒有使用Foxpro,但在「文件」菜單中應該有一個「導出表」命令或類似命令。 –

+1

要嘗試的另一件事可能是'maptools ::: dbf.read',但如果您可以以CSV格式獲取數據,則還有更多選項。讀取大型CSV文件時,我發現'data.table :: fread'非常快。 – Ben

回答

3

根據VFP幫助文件,您可以通過命令窗口使用COPY TO命令以多種格式從Visual FoxPro導出。

例如:

use mydbf in 0 
select mydbf 
copy to myfile.xls type xl5 
copy to myfile.csv type delimited 

如果您有任何語言相關的問題,您可以添加一個「爲代碼頁」條款對那些結束。例如:

copy to myfile.csv type delimited as codepage 1251 

如果你不熟悉VFP我會設法得到的原始數據出來這樣的,而進入了一個平臺,你熟悉,試圖合併等

前要在循環中導出它們,您可以在.PRG文件中使用以下內容(修改頂部的兩個路徑變量以反映您自己的設置)。

Close All 
Clear All 
Clear 

lcDBFDir = "c:\temp\"   && -- Where the DBF files are. 
lcOutDir = "c:\temp\export\"  && -- Where you want your exported files to go. 

lcDBFDir = Addbs(lcDBFDir)  && -- In case you forgot the backslash. 
lcOutDir = Addbs(lcOutDir) 

* -- Get the filenames into an array. 
lnFiles = ADir(laFiles, Addbs(lcDBFDir) + "*.DBF") 

* -- Process them. 
For x = 1 to lnFiles 

    lcThisDBF = lcDBFDir + laFiles[x, 1] 
    Use (lcThisDBF) In 0 Alias currentfile 
    Select currentfile 
    Copy To (lcOutDir + Juststem(lcThisDBF) + ".csv") type csv 
    Use in Select("Currentfile")  && -- Close it. 

EndFor 

Close All 

...並從命令窗口運行它 - 執行myprg.prg或其他。

+1

+1!或許你應該提及她/她可以在哪裏運行這個命令。程序我猜..) – agstudy

+0

非常感謝! 是否有任何選項可以獲取dbf中包含的所有表的列表?並將它們全部導出到循環中? :) – Asayat

+1

這裏的命名與您可能認爲來自數據庫服務器(如MSSQL,PostGres等)的命名略有不同--DBF文件*是*離散表。它們可能屬於或不屬於數據庫容器,它是'數據庫'(具有.DBC擴展名)。如果他們這樣做,你可以用OPEN DATABASE打開數據庫容器,然後用LIST TABLES打開mylist.txt。 –