R - 使用complete.cases 删除字符数据中的NA

问题描述 投票:0回答:1

我想使用

删除数据框“添加”任何列中包含 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() 起作用。再次感谢所有的顾问!

r dataframe character na
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

© www.soinside.com 2019 - 2024. All rights reserved.