Предположим, у меня есть следующее значение df:
library(dplyr)
library(stringr)
input <- data.frame(
Id = c(1:6),
text = c("(714.4) (714) (714*)", "(714.33)", "(189) (1938.23)", "(714.93+) (714*)", "(719)", "(718.4)"))
И я хотел бы получить следующий вывод:
Output <- data.frame(
Id = c(1:6),
text = c("(714.4) (714) (714*)", "(714.33)", "(189) (1938.23)",
"(714.93+) (714*)", "(719) (299)", "(718.4)"),
first_match = c(1,0,0,0,1,0),
second_match = c(1,1,0,1,1,0))
Это для первого столбца, я хочу один, если (714) | (719) | (718) появляются. Для второго столбца я хочу один, если (714.33) | (714 *) | (719) появляются
В тех случаях, когда я хочу оценить, находится ли образец в строке, я использую str_detect функция из пакета stringr . Однако в этом случае с такими символами, как [. + *] Я не получаю ожидаемый вывод.
Я пробовал следующий код, который явно не удался:
attempt_1 <- input %>%
mutate(first_match = ifelse(str_detect(text, "(714)|(719)|(718)"), 1, 0),
second_match = ifelse(str_detect(text, "(714\\.33)|(714\\*)|(719)"), 1, 0))
attempt_2 <- input %>%
mutate(first_match = ifelse(str_detect(text, fixed("(714)|(719)")), 1, 0),
second_match = ifelse(str_detect(text, "(714\\.33)|(714\\*)"), 1, 0))
Я пытался экранировать специальные символы, а также пытался с точным совпадением с фиксированный параметр (я полагаю, он не работает, потому что | не интерпретируется как ИЛИ)
Есть идеи?