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
的情况下做到这一点。在得到 pmin
、replace
逻辑向量上的 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)
我正在使用函数 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
的情况下做到这一点。在得到 pmin
、replace
逻辑向量上的 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)