我正在使用函数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作为输出?
答案 0 :(得分:1)
我们可以在没有ifelse
的情况下执行此操作。在获得pmin
之后,replace
将FALSE
放在逻辑向量上的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)