У меня есть столбец с двумя столбцами, replace_tbl
, в котором есть вектор шаблонов и вектор замен. Я хочу использовать значения в этих столбцах, чтобы создать новую переменную в другой таблице, df
, которая для каждой строки в df
будет l oop через значения replace_tbl$pat
и, в случае обнаружения, будет заменить на replace_tbl$replace
. Если шаблон не обнаружен, он должен вернуть NA
.
. Мне кажется, я должен использовать некоторую комбинацию mutate()
, map2()
и case_when()
, но я не могу понять это вне. По сути, я хотел бы сделать то, что выполняет приведенный ниже код, но без необходимости повторять вызов str_detect()
несколько раз.
library(tidyverse)
replace_tbl <- tibble(
pattern = c("Ideal|Premium", "Very Good"),
replace = c("Apple", "Banana")
)
#what I want to replicate
diamonds %>%
mutate(new_var = case_when(
str_detect(cut, replace_tbl$pattern[[1]]) ~ replace_tbl$replace[[1]],
str_detect(cut, replace_tbl$pattern[[2]]) ~ replace_tbl$replace[[2]],
TRUE ~ NA_character_
)) %>%
head()
# A tibble: 6 x 11
carat cut color clarity depth table price x y z new_var
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> <chr>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 Apple
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 Apple
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 NA
4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63 Apple
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 NA
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 Banana