我在R中有一個數據幀,包括國家的iso代碼。納米比亞的iso代碼恰好是'NA'。 R將此文本'NA'視爲N/A。R - 'NA'文本被視爲N/A
例如下面的代碼給了我一行納米比亞。
test <- subset(country.info,is.na(country.info$iso.code))
我最初認爲這可能是一個因素問題,所以我確定iso代碼列是字符。但是這沒有幫助。
這怎麼解決?
我在R中有一個數據幀,包括國家的iso代碼。納米比亞的iso代碼恰好是'NA'。 R將此文本'NA'視爲N/A。R - 'NA'文本被視爲N/A
例如下面的代碼給了我一行納米比亞。
test <- subset(country.info,is.na(country.info$iso.code))
我最初認爲這可能是一個因素問題,所以我確定iso代碼列是字符。但是這沒有幫助。
這怎麼解決?
這可能與您如何閱讀數據有關。只是因爲它的性格並不意味着你的"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=..
。
如果Thomas的解決方案不起作用,您可以隨時使用countrycode包來將您的國家代碼更改爲導致問題較少的問題。例如,在你的情況下,從ISO2字符到ISO3字符。
country.info$iso.code<-countrycode(country.info$iso.code,"iso2c","iso3c",
warn=TRUE)
(如果iso2c導致問題使用country.names,希望剛果共和國和剛果民主共和國別胡來。)
@Arun感謝偉大的編輯! – Thomas