计算每行是否为 TRUE 或全部为 NA

  • 本文关键字:全部 NA TRUE 计算 是否 r
  • 更新时间 :
  • 英文 :


我有一个这样的逻辑矩阵:

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

最新更新