我正在嘗試根據其他三個列的值(也是 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$4 = ifelse(
grepl("TRUE", DF$1) |
grepl("TRUE", DF$2 |
grepl("TRUE", DF$3), "TRUE","FALSE" ))
但這僅允許我為選項 TRUE 提供某些條件。如果第 2 列顯示 FALSE 并且第 1 列顯示 TRUE 以獲得輸出 FALSE,我不知道如何實作。
我試圖在stackoverflow中搜索類似的問題/答案,(可能有)但我找不到它,因此我想在這里問它。先感謝您。
uj5u.com熱心網友回復:
您可以為每行獲取最后一個非 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
注意:\可以替換function自 R 4.1 以來的類似 lambda 的函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440288.html
上一篇:在lua中定義邏輯運算子意味著
