我在R中有一个数据框架,包括国家的iso代码。纳米比亚的ISO代码恰好是'NA'。R将'NA'这个文本视为NA。
例如下面的代码给我提供了纳米比亚的行。
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 "或类似的东西... 否则,你可以使用一个绝对不会出现在你的文件中的字符串,比如 "z_z_z "或类似的东西。你可以用一个类似于 "z_z_z "这样的字符串来代替 text=..
和你的文件名。
如果Thomas的解决方案不奏效,你可以随时使用 countrycode
包来改变您的国家代码,以减少问题。例如,在你的例子中,从ISO2-character改为ISO3-character。
country.info$iso.code<-countrycode(country.info$iso.code,"iso2c","iso3c", warn=TRUE)
如果 iso2c
惹祸 country.names
希望刚果共和国和刚果民主共和国不要把事情搞砸。