NA 作为 R 中 pmin 的结果

NA as a result to pmin in R

我正在使用函数 pmin 对数据框执行按行操作。

我正在调节两个可能都是 NA 的列。

我的命令是:

ifelse(is.infinite(pmin(A, B, na.rm = T))| pmin(A, B, na.rm = T)>60, 10, 0)

表示如果两者都为NA或两者中的最小值大于60,则结果为10,否则为零。

通常这对 pmin 很好用,除非 A 和 B 都是 NA,在这种情况下我得到的是 NA 而不是 TRUE。常规 min 不会发生这种情况 - 但我不能在数据帧上使用此运算符,因为它未矢量化(即仅获取此列的全局最小值)。

在这种情况下如何获得 TRUE 作为输出?

我们可以在没有 ifelse 的情况下做到这一点。在得到 pminreplace 逻辑向量上的 NA 元素与 FALSE 并乘以 10 以便 FALSE returns 0 而 TRUE 变为 10

library(dplyr)
10 * replace_na((pmin(A, B, na.rm = TRUE) > 60), FALSE)

或在 pmin 之后,使用 0 和 na.rm = TRUE 执行 pmax。这样 NA 元素被 0 替换(假设只有正数),转换为逻辑 (> 60) 并乘以 10(和以前一样)

10 * (pmax(0, pmin(A, B, na.rm = TRUE), na.rm = TRUE) > 60)

数据

A <- c(NA, 65, 32, NA)
B <- c(NA, NA, 63, 23)