How to perform conditional search within a nested list

老子叫甜甜 提交于 2019-12-24 03:25:31

问题


I have a nested list as follows:

list(c("Oesophagus irregular z-line as previously.", " quad biopsies at ,,,m"
), c("Normal examination", "cardia mild inflammation."
), c("stomach normal", "Small polyp EMR and completely removed", 
"Duodenum  normal", "Jejunum normal", "GOJ normal", 
"Nodule seen at the mid oesophagus normal", "This was removed by EMR", 
"All other sites normal  normal", " A small area of residual stomach was removed by APC "))

I would like to search in each element for the presence of any term taken from a list called EventList:

EventList<-c("RFA","EMR","APC")

If the term is found then I would like to see if a location from a locaation list, is also present in the same sentence:

LocationList<-function(){

  tofind <-paste(c("Stomach","Antrum","Duodenum","Oesophagus","GOJ"),collapse = "|")

  return(tofind)

}

If it is not found then I'd like to look in the preceding sentence to see if a location can be seen.

So far I have been able to look in the same sentence only:

r1 <-lapply(text,function(x) Map(paste, str_extract_all(tolower(x),tolower(EventList)), str_extract_all(tolower(x),tolower(LocationList())), MoreArgs = list(sep=":")))

but this just looks for the presence of the terms in each sentence and outputs nothing if not present. How do I convert this to also look in the preceding sentence in a list? Someting like this:

ifelse(lapply(text,function(x) str_extract_all(tolower(x),tolower(LocationList())),str_extract_all(tolower(x),tolower(EventList()), lag element and do the same??

Intended output:

1 ""
2 ""
3 stomach:EMR,oesophagus:EMR,stomach:APC

回答1:


Based on the conditions mentioned in the post

sapply(text,function(x) {

           x1 <- str_extract_all(tolower(x),tolower(paste(EventList, collapse="|")))
           i1 <- which(lengths(x1) > 0)
           if(any(i1)) {
             paste(unlist(Map(c, str_extract_all(tolower(x[i1-1]), 
                                         tolower(LocationList())), 
                       str_extract_all(tolower(x[i1]), tolower(LocationList())))), 
                        toupper(x1[i1]), sep=":", collapse=", ") 

           } else ""

             }

             )

#[1] ""  
#[2] ""   
#[3] "stomach:EMR, oesophagus:EMR, stomach:APC"


来源:https://stackoverflow.com/questions/54125654/how-to-perform-conditional-search-within-a-nested-list

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!