<div dir="ltr"><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large">Você pode combinar sapply, grepl e apply.</div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large"><br></div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large"><span style="font-family:monospace"># Lista de medicamentos que guardei em um objeto chamado patterns.<br>patterns <- c("Oritavancina", "Oxacilina", "Pefloxacino", "Penicilina",<br>  Â  Â  Â  Â  Â  Â  "Pexiganan", "Piperacilina", "Piperacilina-tazobactam",<br>  Â  Â  Â  Â  Â  Â  "Pirazinamida", "Plazomicina", "Polimixina B",<br>  Â  Â  Â  Â  Â  Â  "Posilozid")<br><br># Amostra do Data frame em que preciso encontrar os nomes da lista acima.<br>df <- data.frame(nome =<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â c("CLORETO DE POTASSIO DRAGEA 600MG",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "CLORETO DE SODIO 0,9% SERINGA PREENCHIDA 5ML",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "CLORETO DE SODIO SOLUCAO INJETAVEL 0,9% 10ML",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "CODEINA FOSFATO SOLUCAO ORAL 3MGML 10ML ISCMPA @",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "CODEINA FOSFATO SOLUCAO ORAL 3MGML 5ML ISCMPA @",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "DipiRONA SOLUCAO INJETAVEL 500MGML 2ML",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "DipiRONA SOLUCAO INJETAVEL 500MGML 2ML",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "FUROSEMIDA SOLUCAO INJETAVEL 10MGML 2ML",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "HIDROCORTISONA SUCCINATO SODICO PO LIOFILO INJETAVEL 100MG",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "ONDANSETRONA CLORIDRATO SOLUCAO INJETAVEL 2MGML 4ML",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "ONDANSETRONA CLORIDRATO SOLUCAO INJETAVEL 2MGML 4ML",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "Penicilina G BENZATINA PO LIOFILO INJETAVEL 1200000UI",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "Penicilina G BENZATINA PO LIOFILO INJETAVEL 1200000UI",<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â "PIPERACILINA SODICA 4G + TAZOBACTAM SODICA 0,5G PO LIOFILO INJETAVEL"))<br><br>u <- sapply(patterns, FUN = grepl, x = df$nome)<br>df$medicamento <-<br>  Â  apply(u,<br>  Â  Â  Â  Â  MARGIN = 1,<br>  Â  Â  Â  Â  FUN = function(x) {<br>  Â  Â  Â  Â  Â  Â  # Tá sendo assumido que apenas 1 match ocorre.<br>  Â  Â  Â  Â  Â  Â  index <- head(which(x), n = 1)<br>  Â  Â  Â  Â  Â  Â  ifelse(length(index),<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â names(index),<br>  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â NA_character_)<br>  Â  Â  Â  Â  })</span><br></div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large"><br></div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large">Atenção!</div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large">Se você tiver que fazer isso para muitos itens e muitos medicamentos onde no máximo um match Ã© esperado, esse código tá caro porque ele avalia o match de cada produto (p produtos) com cada item (n itens) e retorna uma matriz n * p de valores lógicos. Você pode escrever a instrução de forma condicional: quando encontrar o primeiro match, passar para o próximo item. Vai ter que fazer um benchmark porque as instruções vetorizadas são rápidas e colocar condicionais em loops Ã© um pouco lento. Tudo vai depender do p e n do seu problema.</div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large"><br></div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large">Outra opção Ã© verificar se não tem como usar um "inner join with approximate matching". Confere o que tem no {stringdist} e {fuzzyjoin}.</div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large"><br></div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large">À disposição.</div><div class="gmail_default" style="font-family:arial narrow,sans-serif;font-size:large">Walmes.<br></div><br></div>