首页 > 解决方案 > 使用一个命令查找不同类型的缺失值 - 语法错误?

问题描述

我似乎有一个我无法找到的语法错误。

我有一列数据框分隔在名为column. 我想在此列中查找所有缺失值。但是,由于某种原因,我返回了整个列表。

这是我的尝试

> length(column)
[1] 712789
> length(column[column == ""])
[1] 24181
> length(column[column == "0"])
[1] 24181
> length(column[is.na(column)])
[1] 24181
> length(column[column == "" || column == "0" || is.na(column)])
[1] 712789

这很奇怪。我希望最后一个子集24181也是如此。即使上面的所有子集都引用不同的元素,输出也不应该大于24181 x 3 = 72549. 相反,整个列表是子集的一部分。

我究竟做错了什么?

[编辑]
出于好奇心,我尝试了两个(而不是三个)子集的任意组合:结果也是712789每次。

标签: rfiltersubset

解决方案


最后一行代码应该使用|而不是||.

单个垂直条适用于向量,但双条仅适用于标量。

假设列的第 i 个值为“”。那么结果的第 i 个值"" == "" | "" == "0" | is.na("")等于 TRUE | 错误 | FALSE 是 TRUE。

假设列的第 i 个值为“0”。那么结果的第 i 个值"0" == "" | "0" == "0" | is.na("0")等于 FALSE | 真的 | FALSE 是 TRUE。

假设列的第 i 个值为 NA。那么结果的第 i 个值NA == "" | NA == "0" | is.na(NA)等于 NA | 不适用 | TRUE 是 TRUE。

因此,对于任何条件,结果的第 i 个值都是 TRUE。否则为 FALSE。

有关详细信息,请参阅: 布尔运算符 && 和 ||


推荐阅读