如何从 dplyr 中的 case_when 捕获逻辑

mdb*_*ftl 2 r dplyr tidyverse

我正在使用case_when()fromdplyr创建以下列,result.

z <- tibble(a = c(40, 30, NA), 
       b = c(NA, 20, 10))


z %>%
          mutate(result = case_when(
                    !is.na(a) ~ a,
                    is.na(a) & !is.na(b) ~ b
          )
          )  
Run Code Online (Sandbox Code Playgroud)

上面给出了以下内容:

      a     b result
  <dbl> <dbl>  <dbl>
1    40    NA     40
2    30    20     30
3    NA    10     10   
Run Code Online (Sandbox Code Playgroud)

但是,我想同时创建另一列 ,它显示从中提取result_logic值的位置(a 或 b)。result输出看起来像这样。

      a     b result result_logic
  <dbl> <dbl>  <dbl>        <chr>
1    40    NA     40          a
2    30    20     30          a
3    NA    10     10          b
Run Code Online (Sandbox Code Playgroud)

有什么方法可以捕获在 中评估的逻辑case_when()

谢谢

Pau*_*ulS 6

像下面这样的东西吗?

\n
library(tidyverse)\n\nz <- tibble(a = c(40, 30, NA), \n            b = c(NA, 20, 10))\n\nz %>%\n  mutate(result = case_when(\n    !is.na(a) ~ str_c(a, "a", sep = " "),\n    is.na(a) & !is.na(b) ~ str_c(b, "b", sep = " "))) %>% \n  separate(result, into=c("result", "result_logic"), convert = T)\n\n#> # A tibble: 3 \xc3\x97 4\n#>       a     b result result_logic\n#>   <dbl> <dbl>  <int> <chr>       \n#> 1    40    NA     40 a           \n#> 2    30    20     30 a           \n#> 3    NA    10     10 b\n
Run Code Online (Sandbox Code Playgroud)\n