ifelse 函数基于多个条件

Ifelse function based on multiple conditions

我正在尝试根据其他三个列(也是 TRUE/FALSE)的值创建一个新列 (TRUE/FALSE)。 这是一个小样本。

DF
ID     1      2      3
1      TRUE   NA     NA
2      FALSE  TRUE   NA
3      TRUE   TRUE   NA
4      TRUE   FALSE  NA
5      TRUE   FALSE  TRUE
6      FALSE  FALSE  TRUE
7      TRUE   FALSE  FALSE
8      FALSE  NA     NA
9      NA     NA     NA

并非所有三列的行数都相同。 (因此有很多 NA 值)。数据是经过检查的文件,在第 2 列中重新检查了其中一些文件,在第 3 列中再次重新检查了更小的部分。

所以第 2 列覆盖第 1 列,第 3 列覆盖第 1 和第 2 列。

我想要以下输出

ID     1      2      3           4
1      TRUE   NA     NA          TRUE
2      FALSE  TRUE   NA          TRUE
3      TRUE   TRUE   NA          TRUE
4      TRUE   FALSE  NA          FALSE
5      TRUE   FALSE  TRUE        TRUE
6      FALSE  FALSE  TRUE        TRUE
7      TRUE   FALSE  FALSE       FALSE
8      FALSE  NA     NA          FALSE
9      NA     NA     NA          FALSE 

类 是字符,所以我用函数 ifelse 和 grepl

试过了
DF = ifelse(
        grepl("TRUE", DF) |
                grepl("TRUE", DF |
                grepl("TRUE", DF), "TRUE","FALSE"  ))

但这只允许我为选项 TRUE 提供某些条件。如果第 2 列显示 FALSE 而第 1 列显示 TRUE 以获取输出 FALSE,我不知道如何实现。

我试图在 Whosebug 中搜索类似的 question/answer,(可能有)但我找不到它,因此我想在这里问一下。 提前谢谢你。

您可以为每行取最后 non-NA 个值:

df$v4 <- apply(df[, -1], 1, FUN = \(x) ifelse(all(is.na(x)), FALSE, unlist(tail(x[!is.na(x)], 1))))

#> df$v4
#[1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE FALSE

注意:自 R 4.1 起,\ 可以替换 lambda-like 函数中的 function