我在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 | 评估 |
---|---|---|---|
正确 | 错误 | 不适用 | 错误 |
正确 | 正确 | 正确 | 正确 |
不适用 | 错误 | 不适用 | 错误 |
不适用 | 不适用 | 正确 | 正确 |
使用
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
您可以使用
rowSums
两次来检查 TRUE 的数量是否与按行的完整值的数量匹配:
df$assessment <- rowSums(df, na.rm = TRUE) == rowSums(!is.na(df))
#[1] FALSE TRUE FALSE TRUE
为了好玩:
Reduce(`&`, replace(df, is.na(df), TRUE))
# [1] FALSE TRUE FALSE TRUE