<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>