我在 R 中有一个数据框,包括国家/地区 iso 代码。纳米比亚的 iso 代码恰好是“NA”。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"
(例如, in 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
,希望刚果共和国和刚果民主共和国不要搞砸。