在R语言中使用dplyr判断列中非NA值是否全为TRUE
使用dplyr判断数据框每行指定列非NA值是否全为TRUE
需求说明
给数据框新增assessment列,判断每行col1至col3的非NA值是否全部为TRUE:
- 若该行非NA值全为TRUE,
assessment为TRUE - 若该行存在任意一个非NA的FALSE值,
assessment为FALSE
示例数据
df <- data.frame(col1 = c(TRUE, TRUE, NA, NA), col2 = c(FALSE, TRUE, FALSE, NA), col3 = c(NA, TRUE, NA, TRUE))
dplyr解决方案
使用dplyr的if_all()函数高效实现需求,无需按行循环:
library(dplyr) df_result <- df %>% mutate(assessment = if_all(col1:col3, ~ is.na(.x) | .x))
结果验证
执行代码后得到的结果如下:
| col1 | col2 | col3 | assessment |
|---|---|---|---|
| TRUE | FALSE | NA | FALSE |
| TRUE | TRUE | TRUE | TRUE |
| NA | FALSE | NA | FALSE |
| NA | NA | TRUE | TRUE |
代码解释
if_all(col1:col3, ~ is.na(.x) | .x):对每行的col1至col3列逐一检查,判断元素是否为NA或TRUE。只有当该行所有指定列都满足该条件时,assessment才返回TRUE,否则返回FALSE,完全匹配需求。
内容的提问来源于stack exchange,提问作者fe108
相关产品推荐
相关产品推荐

