R 中使用 NA 的逻辑索引 - 如何设置为 FALSE 或排除而不是 return NA?

Logical Indexing with NA in R - How to set to FALSE or exclude rather than return NA?

如果这是一个常见问题,我深表歉意,但它在我 运行 的脚本中造成了一些意想不到的挫败感。我有一个大致如下所示的数据集(尽管实际上要大得多):

df <- data.frame(A = c(1, 2, 3, NA, NA, 6), 
                 B = c(10, 20, 30, 40 , 50, 60))

我的脚本循环遍历 A 列中的值列表,并且应该根据 B 中的值是否大于 25 来采取行动。但是,A 中缺失值对应的 B 值总是 returned,而我希望它们始终被排除在外。例如,

df$B[df$A == 6]

给出输出

NA NA 60

而不是预期

60

因此,代码

df$B[df$A == 6] > 25

returns

NA NA TRUE

而不只是

TRUE

有人可以解释这个原因和任何简单的解决方案吗?想到的直接解决方案是删除 A 列中具有 NA 值的任何行,但我更喜欢一种解决方案,该解决方案对 A 中的缺失具有鲁棒性,并且只会 return 来自 B 的单个所需逻辑值。

每当你询问N是否A可用 (NA) value 等于 numberanything else - 你得到了唯一可能的答案:The answer is Not可用 (NA).

NA 可能等于6,或者等于John the Baptist,或者等于⛄以及到任何其他对象。只是不可能说它是否存在,因为 值是 not available.

要得到你想要的答案,你可以在结果上使用na.omit()na.exclude()。或者您可以在子集化过程中应用又一个逻辑条件

with(df, B[A == 6 & !is.na(A)])
# [1] 60