R - 使用complete.cases函数移除字符数据中的NA值

3

我想使用以下方法删除数据框“addition”中任何列中包含NA值的行:

a <- addition[complete.cases(addition), ]

并且

a <- addition[!is.na(addition)]

并且

a <- na.omit(addition)

但是NA值仍然存在。我也尝试仅限包含一些NA值的列来限制complete.cases函数。但我发现它们根本没有被识别:

   which(is.na(addition))
    integer(0)

数据框"addition"长这样(在第1211行,NA是第4列):

row.names lemma pos derlemma derpos handannotated
11 akvizice N perform_akvizice V 1
1211 diagnóza N NA V 1
1221 dialýza N dialyzovat V 1
1241 díkuvzdání N perform_díkuvzdání V 1

我只用这个命令去除缺失值:

a <- addition[which(addition$derlemma != "NA"), ]

我是否错误地使用了complete.cases函数或带注释的"NA",或者可能在R Studio用户选项中搞错了什么?非常感谢您的任何支持。
使用RStudio版本0.98.1028,在Win 7 Professional 64x上工作。
待会再说: 由于下面的答案,我意识到字符变量中的“NA”不被解释为“无法获得”,而只是一个字符串。
我在R中创建了整个数据集,随后在RStudio中的数据编辑器中添加了没有引号的“NA”字符串到某些单元格中。因此我未能为R指定“NA”表示NA。
当我将数据框保存为.csv文件并使用read.table()重新加载时,我能够指定na.strings = "NA",然后complete.cases()就可以工作了。再次感谢所有顾问们!

你能提供一部分你遇到问题的数据吗? - Yollanda Beetroot
4
看起来你所认为的NA(见?NA)在你的数据中实际上是一个字符字符串"NA"。如果你有NA,那么 na.omit(yourdataset)就可以正常工作了。根据你在读入R中的数据时如何编码缺失值,read.table函数中的na.strings参数可能会有用。 - Henrik
如果您在RStudio中使用Import Dataset工具,它有一个na.strings字段,用于指定缺失值的编码方式 - 如果您的原始数据文件如上所示,默认的NA应该可以正常工作。 - Heather Turner
同意Henrik的观点。如果您的数据中包含NA而不是"NA",那么addition[complete.cases(addition), ]应该可以正常工作。您需要在上游修复一些问题。如果您使用read.table加载数据,请确保使用默认值na.strings = "NA"。或者您可能是通过编程创建数据,在这种情况下,请确保将那些不可用的值填充为NA而不是"NA" - flodel
1个回答

0
如评论中所提到的,addition[complete.cases(addition), ]确实会删除带有(实际)NA值的行:
addition <- read.table(text =
"row.names lemma pos derlemma derpos handannotated
11 akvizice N perform_akvizice V 1
1211 diagnóza N NA V 1
1221 dialýza N dialyzovat V 1
1241 díkuvzdání N perform_díkuvzdání V 1", header = TRUE)

addition[complete.cases(addition), ]

  row.names      lemma pos           derlemma derpos handannotated
1        11   akvizice   N   perform_akvizice      V             1
3      1221    dialýza   N         dialyzovat      V             1
4      1241 díkuvzdání   N perform_díkuvzdání      V             1

问题是,正如提问者所说,他们没有意识到"NA" != NA - 第一个是字符串,第二个是“长度为1的逻辑常量,其中包含一个缺失值指示器”(来源:docs

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