У меня есть следующий список:
list(c("\n", "\n", "oesophagus graded and fine\n",
"\n", "\n", "\n", "stomach and antrum altough with some rfa response rfa\n",
"\n", "mucosa washed a lot\n", "\n", "treated with halo rfa ultra \n",
"\n", "total of 100 times\n", "\n", "duodenum looks ok"))
Я бы хотел извлечь из списка термин, ближайший к другому термину, найденному в другом списке.
Мойжелаемый результат -
antrum:rfa
Мой первый список:
EventList<-c("rfa", "apc", "dilat", "emr", "clip", "grasp", "probe", "iodine",
"acetic", "nac", "peg", "botox")
Мой второй список:
tofind<-"ascending|descending|sigmoid|rectum|transverse|caecum|splenic|ileum|rectosigmoid|ileocaecal|hepatic|colon|terminal|terminal ileum|ileoanal|prepouch|pouch|stomach|antrum|duodenum|oesophagus|goj|ogj|cardia|anastomosis"
Код, который я использую:
EventList %>%
map(
~words %>%
str_which(paste0('^.*', .x)) %>%
map_chr(
~words[1:.x] %>%
str_c(collapse = ' ') %>%
str_extract_all(regex(tofind, ignore_case = TRUE)) %>%
map_if(is_empty, ~ NA_character_) %>%
flatten_chr()%>%
`[[`(1) %>%
.[length(.)]
) %>%
paste0(':', .x)
) %>%
unlist() %>%
str_subset('.+:')
Это дает мне Событие (в данном случае rfa
), но вместо того, чтобы распределить его на antrum
, оно выделяет его на oesophagus
.
Поэтому оно передает егопервый термин, найденный в списке tofind
, а не термин, ближайший к событию.
Я подозреваю, что строка
`[[`(1) %>%
.[length(.)]
является виновником, но я не знаю, как изменитьэто так, что это дает мне ближайший термин, а не первый термин