3

我在 R 中有一个数据框,包括国家/地区 iso 代码。纳米比亚的 iso 代码恰好是“NA”。R 将此文本“NA”视为 N/A。

例如,下面的代码给了我纳米比亚的行。

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

我最初认为这可能是一个因素问题,所以我确保 iso 代码列是字符。但这没有帮助。

如何解决?

4

2 回答 2

6

这可能与您读取数据的方式有关。仅仅因为它的字符并不意味着你"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=..用您的文件名替换。

于 2013-08-01T09:35:58.890 回答
0

如果 Thomas 的解决方案不起作用,您始终可以使用该countrycode软件包将您的国家/地区代码更改为导致较少问题的代码。例如,在您的情况下,从 ISO2 字符到 ISO3 字符。

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

如果iso2c造成使用问题country.names,希望刚果共和国和刚果民主共和国不要搞砸。

于 2013-08-01T15:59:46.567 回答