我在R中有一个包含国家iso代码的数据框。纳米比亚的iso代码恰好是'NA'。 R将此文本“NA”视为N / A.
例如,下面的代码为我提供纳米比亚的行。
test <- subset(country.info,is.na(country.info$iso.code))
我最初认为这可能是一个因素问题,所以我确保iso代码列是字符。但这没有用。
如何解决这个问题?
答案 0 :(得分:5)
这可能与您如何读取数据有关。仅仅因为它的性格并不意味着你的"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 :(得分:0)
如果Thomas的解决方案不起作用,您可以随时使用 countrycode 包将您的国家/地区代码更改为导致问题较少的内容。在您的情况下,例如从ISO2字符到ISO3字符。
country.info$iso.code<-countrycode(country.info$iso.code,"iso2c","iso3c",
warn=TRUE)
(如果 iso2c 导致问题,请使用 country.names ,希望刚果共和国和刚果民主共和国不要搞砸了。)