NA导致R中的pmin

时间:2019-07-03 04:48:11

标签: r dplyr vectorization

我正在使用函数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不会发生这种情况-但是我不能在数据帧上使用此运算符,因为它不是矢量化的(即,仅获取此列的GLOBAL最小值)。

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

1 个答案:

答案 0 :(得分:1)

我们可以在没有ifelse的情况下执行此操作。在获得pmin之后,replaceFALSE放在逻辑向量上的NA元素上并乘以10,以使FALSE返回0,而TRUE变为10

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

或者在pmin之后,用0和pmax做一个na.rm = TRUE。这样,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)