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

时间:2017-07-20 11:13:49

标签: 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(因此我无法在每一行上应用它)

1 个答案:

答案 0 :(得分:2)

我们可以使用两个rowSums为只有NAs的行创建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