2010-10-14 70 views
1

當我使用RODBC導入國家數據時,我經常使用ISO2代碼。不幸的是,納米比亞的ISO2「NA」總是被遺漏。這當然有各種各樣的方法,但我想知道是否有人找到了正確導入的方法。我試過RODBC import to keep「NA」

df <- sqlFetch(ch,"data_from_database", na.strings="") 
df <- sqlFetch(ch,"data_from_database", as.is) 

無濟於事。有小費嗎?

+0

試着用as.is = T? – 2010-10-14 12:48:57

+2

第一個應該工作。 R,RODBC的版本和您使用的數據庫有哪些? – Marek 2010-10-14 15:04:44

+0

as.is = T似乎也不起作用。我正在使用R版本2.10.1和RODBC 1.3-1。我的數據庫在SQLserver上,但是我有通過RODBC從Excel導入的相同問題。 – Tom 2010-10-15 13:14:01

回答

1

哈!那麼as.is = T不起作用,na.string =「」不起作用,但與他們的能力結合在一起...

> ch <- odbcConnectExcel("m.xls") 
> s <- sqlFetch(ch, "m", as.is=T) 
> close(ch) 
> s 
    iso2 value 
1 GB 87 
2 <NA> 456 
3 IN 423 
> ch <- odbcConnectExcel("m.xls") 
> r <- sqlFetch(ch, "m", na.string="") 
> close(ch) 
> r 
    iso2 value 
1 GB 87 
2 <NA> 456 
3 IN 423 
> ch <- odbcConnectExcel("m.xls") 
> n <- sqlFetch(ch, "m", as.is=T, na.string="") 
> close(ch) 
> n 
    iso2 value 
1 GB 87 
2 NA 456 
3 IN 423 
+0

它看起來像一個「sqlGetResults」中的「bug」。我檢查了源代碼,看起來'na.string'不能傳遞給'sqlGetResults'中使用的'type.convert'。 – Marek 2010-10-15 15:12:56

1

大部分數據庫裝載機最終都會調用read.table()。所以作爲第一步,我們來解決這個問題。

與數據文件tom.csv作爲

country,value 
GB,55 
NA,77 
CH,23 

我得到

R> read.csv("/tmp/tom.csv") 
    country value 
1  GB 55 
2 <NA> 77 
3  CH 23 
R> read.csv("/tmp/tom.csv", na.string="#") 
    country value 
1  GB 55 
2  NA 77 
3  CH 23 
R> 

這麼簡單設置na.string爲不同的值就足夠了。

試試看,sqlQuery()sqlFetch()更直接有用。

+0

謝謝,德克。您的解決方案對於read.csv非常有用,但同樣的事情對於sqlFetch或sqlQuery不起作用。也許這是一種錯誤?在此期間,我將繼續使用我的解決方案功能。 – Tom 2010-10-15 12:36:44