2013-08-01 64 views
1

我在R中有一個數據幀,包括國家的iso代碼。納米比亞的iso代碼恰好是'NA'。 R將此文本'NA'視爲N/A。R - 'NA'文本被視爲N/A

例如下面的代碼給了我一行納米比亞。

test <- subset(country.info,is.na(country.info$iso.code)) 

我最初認爲這可能是一個因素問題,所以我確定iso代碼列是字符。但是這沒有幫助。

這怎麼解決?

回答

3

這可能與您如何閱讀數據有關。只是因爲它的性格並不意味着你的"NA"不是NA,例如:

z <- c("NA",NA,"US") 
class(z) 
#[1] "character" 

您可以通過給我們(的一部分),您的數據dput()證實了這一點。

當您閱讀數據時,請嘗試將na.strings = "NA"(例如read.csv)更改爲其他內容並查看其是否有效。

例如,na.strings = ""

read.table(text="code country 
NA Namibia 
GR Germany 
FR France", stringsAsFactors=FALSE, header=TRUE, na.strings="") 
# code country 
# 1 NA Namibia 
# 2 GR Germany 
# 3 FR France 

請務必檢查使用的""不會導致其他任何變動。否則,您可以使用字符串,絕對不會出現在您的文件中,如「z_z_z」或類似的東西..您可以用您的文件名替換text=..

+1

@Arun感謝偉大的編輯! – Thomas

0

如果Thomas的解決方案不起作用,您可以隨時使用countrycode包來將您的國家代碼更改爲導致問題較少的問題。例如,在你的情況下,從ISO2字符到ISO3字符。

country.info$iso.code<-countrycode(country.info$iso.code,"iso2c","iso3c", 
            warn=TRUE) 

(如果iso2c導致問題使用country.names,希望剛果共和國和剛果民主共和國別胡來。)