我有一个像这样的逻辑矩阵:
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
(因此我无法在每一行上应用它)
答案 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