使用“NA”作为合法的非缺失值

3
我正在处理一个数据集,其中包含以大写字母输入的名字。我需要将名字作为字符变量处理,而不是因子。
数据集中有一个人的名字是"NA"。可以让 R 将 "NA" 视为合法的字符值吗?我的解决方案是将该人重命名为 NAA,但我想知道是否有更好的方法。

5
你的数据集中是否有缺失值?如果没有,只需将 read.table 函数中的 na.strings 参数修改为其他内容即可。 - A5C1D2H2I1M1N2O1R2T1
2
"NA" 是 R 中的字符值,而不是 NA 值。因此,在导入时,请确保您的真实 NA 值已经编码不同,并且要注意处理这个问题。 - Roland
感谢Roland和Ananda。在read.table中设置na.strings="ZZZ"解决了我的问题。 - JMH
1
可怜的ZZZ Top将成为“NA” Top。 :( 使用na.strings="."可能更安全。 - Roland
1个回答

1
作为我的评论的示范,请考虑以下示例CSV文件:
x <- tempfile()
cat("v1,v2", "NA,1", "AB,3", sep = "\n", file = x)

cat(readLines(x), sep = "\n")
# v1,v2
# NA,1
# AB,3

这是一个基本的read.csvstr。请注意,NA被视为NA
str(read.csv(x))
# 'data.frame':  2 obs. of  2 variables:
#  $ v1: Factor w/ 1 level "AB": NA 1
#  $ v2: int  1 3

现在,将不同的字符指定为您的na.strings参数:
str(read.csv(x, na.strings = ""))
# 'data.frame':  2 obs. of  2 variables:
#  $ v1: Factor w/ 2 levels "AB","NA": 2 1
#  $ v2: int  1 3

FYI,read.csv现在有一个文本参数:read.csv(text = c("v1,v2", "NA,1", "AB,3")) - hadley
@hadley,我非常清楚文本参数。只是演示一下,就好像从实际文件中读取一样,以复制 OP 可能经历的情况。 - A5C1D2H2I1M1N2O1R2T1

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