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

3
我在R中有一个数据框,其中包含国家ISO代码。纳米比亚的ISO代码恰好是“NA”。R将此文本“NA”视为N/A。
例如,下面的代码会给我带来纳米比亚的行:
test <- subset(country.info,is.na(country.info$iso.code))

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

如何解决这个问题?

2个回答

6

这可能与您读取数据的方式有关。仅因为它是字符,不意味着您的"NA"不是NA,例如:

z <- c("NA",NA,"US")
class(z)
#[1] "character"

您可以通过给我们提供您的数据的(部分)来确认此内容。
当您读取数据时,请尝试更改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=..替换为您的文件名。


旧答案新问题:是否可以针对每列指定 na.strings?在一个表格中(在那里我们无法控制 NA 字符串的标识),可能存在具有真实 NA 值的数值列。能够按列抑制NA解释将是不错的选择... - dojuba
@dojuba 我不这么认为。你可以看看 readr::read_csv() 等是否支持这个。 - Thomas

0
如果Thomas的解决方案不起作用,您可以始终使用countrycode包将您的国家代码更改为一些会导致较少问题的内容。例如,在您的情况下,从ISO2字符到ISO3字符。

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

如果iso2c引起问题,请使用country.names,希望刚果共和国和刚果民主共和国不会搞砸事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接