R - 'NA'文本被视为N / A.

时间:2013-08-01 09:31:06

标签: r text na

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

例如,下面的代码为我提供纳米比亚的行。

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

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

如何解决这个问题?

2 个答案:

答案 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 ,希望刚果共和国和刚果民主共和国不要搞砸了。)