當我使用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)
無濟於事。有小費嗎?
當我使用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)
無濟於事。有小費嗎?
哈!那麼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
它看起來像一個「sqlGetResults」中的「bug」。我檢查了源代碼,看起來'na.string'不能傳遞給'sqlGetResults'中使用的'type.convert'。 – Marek 2010-10-15 15:12:56
大部分數據庫裝載機最終都會調用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()
更直接有用。
謝謝,德克。您的解決方案對於read.csv非常有用,但同樣的事情對於sqlFetch或sqlQuery不起作用。也許這是一種錯誤?在此期間,我將繼續使用我的解決方案功能。 – Tom 2010-10-15 12:36:44
試着用as.is = T? – 2010-10-14 12:48:57
第一個應該工作。 R,RODBC的版本和您使用的數據庫有哪些? – Marek 2010-10-14 15:04:44
as.is = T似乎也不起作用。我正在使用R版本2.10.1和RODBC 1.3-1。我的數據庫在SQLserver上,但是我有通過RODBC從Excel導入的相同問題。 – Tom 2010-10-15 13:14:01