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
。
我正在尝试根据其他三个列(也是 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
。