我想使用
删除数据框“添加”任何列中包含 NA 值的行a <- addition[complete.cases(addition), ]
和
a <- addition[!is.na(addition)]
和
a <- na.omit(addition)
但 NA 仍然存在。我还尝试将
complete.cases
限制为包含一些 NA 的唯一列。
我发现他们根本没有被识别:
which(is.na(addition))
integer(0)
数据框“添加”如下所示(NA 是第 1211 行的第 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
我只使用此方法删除 NA:
a <- addition[which(addition$derlemma != "NA"), ]
我是否以错误的方式使用了complete.cases函数或带注释的“NA”,或者我是否可能弄乱了R Studio用户选项中的某些内容?
非常感谢您的支持。
使用 RStudio 版本 0.98.1028,Win 7 Professional 64x。
稍后: 感谢下面的答案,我意识到字符变量中的“NA”不会被解释为“不可用”,而只是一个字符串。
我在 R 中创建了整个数据集,随后将“NA”字符串(不带引号)添加到 RStudio 数据编辑器的一些单元格中。因此我未能为 R 指定“NA”表示 NA。
当我将数据框保存为 .csv 并使用 read.table() 再次加载它时,我能够指定 na.strings = "NA" 并且complete.cases() 起作用。再次感谢所有的顾问!
正如评论中提到的,
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 )