列中的所有值都是 TRUE 忽略 NA

问题描述 投票:0回答:3

我在R工作

样本数据:

df <- data.frame(col1 = c(TRUE, TRUE, NA, NA), 
                 col2 = c(FALSE,  TRUE, FALSE, NA), 
                 col3 = c(NA, TRUE, NA, TRUE))

print(df)

col1 col2 col3
正确 错误 不适用
正确 正确 正确
不适用 错误 不适用
不适用 不适用 正确

期望的结果

我想要一种评估 col1 --> col3 是否都是 TRUE 的方法,忽略 NA。

col1 col2 col3 评估
正确 错误 不适用 错误
正确 正确 正确 正确
不适用 错误 不适用 错误
不适用 不适用 正确 正确
r dplyr mutate
3个回答
2
投票

使用

all

cbind(df, assessment = apply(df, 1, \(x) all(x, na.rm=T)))
  col1  col2 col3 assessment
1 TRUE FALSE   NA      FALSE
2 TRUE  TRUE TRUE       TRUE
3   NA FALSE   NA      FALSE
4   NA    NA TRUE       TRUE

1
投票

您可以使用

rowSums
两次来检查 TRUE 的数量是否与按行的完整值的数量匹配:

df$assessment <- rowSums(df, na.rm = TRUE) == rowSums(!is.na(df))
#[1] FALSE  TRUE FALSE  TRUE

0
投票

为了好玩:

Reduce(`&`, replace(df, is.na(df), TRUE))
# [1] FALSE  TRUE FALSE  TRUE
© www.soinside.com 2019 - 2024. All rights reserved.