NA作为R中pmin的结果

NA作为R中pmin的结果,r,dplyr,vectorization,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上,但我不能在数据帧上使用此运算符,因为它

我正在使用函数
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
后,
将逻辑向量上的NA元素替换为
FALSE
并与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(与以前一样)

数据
A为什么要使用
is.infinite
而不是
is.na
?你说得对!因为
min
提供了。。。但显然pmin给了NA!谢谢@nicola
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)