我有一个这样的逻辑矩阵:
x = cbind(c(T,F,F,NA), c(T,NA,F,NA), c(NA,F,F,NA), c(T,T,NA,NA))
我需要知道每一行是否至少有一个 TRUE,无论 NA 是什么,除非所有行都是 NA。
然后,我的样本的预期输出是fun(x) => c(TRUE,TRUE,FALSE,NA)
。
有什么功能可以实现这一点吗?
这是我的尝试:
rowSums(x) > 0L
返回c(NA,NA,FALSE,NA)
rowSums(x, na.rm = T) > 0L
返回c(TRUE,TRUE,FALSE,FALSE)
coalesce(NA, F, F, T)
返回FALSE
(所以我不能在每一行上应用它(
我们可以使用两个rowSums
为只有 NA 的行创建NA
(NA^!rowSums(!is.na(x)))*rowSums(x, na.rm = TRUE)>0
#[1] TRUE TRUE FALSE NA
或者另一种方法是使用pmax
do.call(pmax, c(as.data.frame(x), na.rm = TRUE)) > 0
#[1] TRUE TRUE FALSE NA