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)