我正在使用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
)
)
以上給出了以下內容:
a b result
<dbl> <dbl> <dbl>
1 40 NA 40
2 30 20 30
3 NA 10 10
但是,我想同時創建另一列 ,result_logic它顯示中的值result是從哪里提取的(a 或 b)。輸出看起來像這樣。
a b result result_logic
<dbl> <dbl> <dbl> <chr>
1 40 NA 40 a
2 30 20 30 a
3 NA 10 10 b
有沒有辦法捕獲在 中評估的這個邏輯case_when()?
謝謝
uj5u.com熱心網友回復:
像下面這樣的?
library(tidyverse)
z <- tibble(a = c(40, 30, NA),
b = c(NA, 20, 10))
z %>%
mutate(result = case_when(
!is.na(a) ~ str_c(a, "a", sep = " "),
is.na(a) & !is.na(b) ~ str_c(b, "b", sep = " "))) %>%
separate(result, into=c("result", "result_logic"), convert = T)
#> # A tibble: 3 × 4
#> a b result result_logic
#> <dbl> <dbl> <int> <chr>
#> 1 40 NA 40 a
#> 2 30 20 30 a
#> 3 NA 10 10 b
uj5u.com熱心網友回復:
您可以顛倒上述兩個步驟,然后讓第二個步驟“簡單地”選擇所選值。這將只涉及一個case_when呼叫:
library(tidyverse)
z <- tibble(a = c(40, 30, NA),
b = c(NA, 20, 10))
z %>%
mutate(result_logic = case_when(
!is.na(a) ~ "a",
is.na(a) & !is.na(b) ~ "b"
),
result = map2_dbl(row_number(), result_logic, ~ z[[.x, .y]]))
#> # A tibble: 3 x 4
#> a b result_logic result
#> <dbl> <dbl> <chr> <dbl>
#> 1 40 NA a 40
#> 2 30 20 a 30
#> 3 NA 10 b 10
由reprex 包(v2.0.1)于 2021 年 12 月 20 日創建
uj5u.com熱心網友回復:
這只是一種替代方法dplyr:
library(dplyr)
z %>%
mutate(result = case_when(
!is.na(a) ~ a,
is.na(a) & !is.na(b) ~ b),
across(-result, ~case_when(
!is.na(.) ~ cur_column()), .names = 'new_{col}'),
result_logic = coalesce(new_a, new_b), .keep="unused")
a b result result_logic
<dbl> <dbl> <dbl> <chr>
1 40 NA 40 a
2 30 20 30 a
3 NA 10 10 b
uj5u.com熱心網友回復:
library(dplyr, warn.conflicts = FALSE)
z <- tibble(a = c(40, 30, NA),
b = c(NA, 20, 10))
z %>%
mutate(
result = do.call(coalesce, across(a:b)),
result_logic =
do.call(coalesce,
across(a:b, ~ ifelse(is.na(.), NA, cur_column())))
)
#> # A tibble: 3 × 4
#> a b result result_logic
#> <dbl> <dbl> <dbl> <chr>
#> 1 40 NA 40 a
#> 2 30 20 30 a
#> 3 NA 10 10 b
由reprex 包(v2.0.1)于 2021 年 12 月 20 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388509.html
