gpt4 book ai didi

r - 将 ifelse() 与 dplyr::if_any() 一起使用,FALSE 情况下的值返回 NA

转载 作者:行者123 更新时间:2023-12-05 01:03:34 24 4
gpt4 key购买 nike

我正在尝试根据数据框中的其他列创建标志列。

示例:

df <- tribble(
~x1, ~x2, ~x3, ~x4,
1, 0, 1, 1,
0, 0, NA, NA,
1, 0, NA, 1,
0, 0, NA, NA,
0, 1, NA, 0
)

我想创建一个标志列,如果值 1 出现在 x1 ~ x4 的任何列中,那么标志的值将为 1,否则为 0。

res <- df |> mutate(flag = ifelse(if_any(x1:x4, function(x) x == 1), 1, 0))

我尝试过将 dplyr::if_any()ifelse() 一起使用,它似乎在大多数情况下都有效,但由于某种原因它返回 NA为假的情况。

> res
# A tibble: 5 × 5
x1 x2 x3 x4 flag
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 0 1 1 1
2 0 0 NA NA NA
3 1 0 NA 1 1
4 0 0 NA NA NA
5 0 1 NA 0 1

为什么会这样?有什么更好的解决方案?

编辑:我试图查看 if_any() 函数本身返回的内容,它似乎返回 NA 而不是 false。

> res
# A tibble: 5 × 6
x1 x2 x3 x4 flag true_flase
<dbl> <dbl> <dbl> <dbl> <dbl> <lgl>
1 1 0 1 1 1 TRUE
2 0 0 NA NA NA NA
3 1 0 NA 1 1 TRUE
4 0 0 NA NA NA NA
5 0 1 NA 0 1 TRUE

最佳答案

根据 https://stackoverflow.com/a/44411169/10276092

You can use %in% instead of == to sort-of ignore NAs.

df %>%  mutate(flag = ifelse(if_any(.cols=x1:x4, .fns= ~ . %in% 1), 1, 0))

关于r - 将 ifelse() 与 dplyr::if_any() 一起使用,FALSE 情况下的值返回 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74032592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com