如何在R数据集中忽略NA生成符合指定规则的Global逻辑列
解决方案
你可以用case_when结合if_any和if_all一步实现所有规则,完整代码如下:
library(dplyr) df <- data.frame(A = c(T, NA, NA, NA), B = c(NA, F, NA, NA), C = c(F, NA, T, NA)) df <- df %>% mutate(Global = case_when( # 规则3:所有列均为NA时返回NA if_all(c(A,B,C), is.na) ~ NA, # 规则1:任意列值为TRUE时返回TRUE(自动忽略NA) if_any(c(A,B,C), ~ .x) ~ TRUE, # 规则2:其余情况(所有列是FALSE或NA,但不全为NA)返回FALSE TRUE ~ FALSE ))
代码说明
if_all(c(A,B,C), is.na):判断当前行的A、B、C列是否全为NA,匹配规则3的场景;if_any(c(A,B,C), ~ .x):检查当前行是否存在任意一列值为TRUE,逻辑型判断会自动忽略NA,匹配规则1的场景;- 最后的
TRUE ~ FALSE:覆盖剩余所有场景——也就是行内没有TRUE,但至少存在一个FALSE(其余为NA),匹配规则2的场景。
运行后得到的结果与预期完全一致:
| A | B | C | Global |
|---|---|---|---|
| TRUE | NA | FALSE | TRUE |
| NA | FALSE | NA | FALSE |
| NA | NA | TRUE | TRUE |
| NA | NA | NA | NA |
内容的提问来源于stack exchange,提问作者LenaB
相关产品推荐
相关产品推荐

