Search code examples
rextractstringr

Finding matches in a list of strings


I have a data frame column where each row has a character text. I need to filter only rows which matches a list of strings.

library(data.table)
library(plyr)
library(dplyr)

The following object has all comments available.

coment<-c("levou meses a incluir um plano de ensino e ainda assim modificou datas durante o semestre", 
"demora na correcao, sem parametro para criacao da proxima tarefa devido falta de retorno na tarefa anterior", 
"a professora dispersava demais durante as aulas.", "o estimulo a participacao nas aulas obviamente vai tambem do interesse do aluno, mas a professora tambem nao colaborava muito, nunca teve uma dinamica que fosse capaz de envolver os alunos e provoca-los a de fato participarem da aula, sempre houve mais do mesmo, \"\"quem leu o texto?\"\".\n", 
"criterios de avaliacao, datas , horarios, como seriam as avaliacoes... foram pontos que demoraram um longo periodo para serem definidos.", 
"uma cadeira que tem um volume de texto tao grande nao deveria possuir somente duas provas a meu ver, ainda somos alunos e muitas vezes estamos vendo o conteudo pela primeira vez acumular tanto conteudo para uma prova so prejudica o aluno.", 
"nao houve correcao nem discussao pos avaliacao.", "faltou melhor comunicacao no objetivo do trabalho final.", 
"nao foi explicado o que seria avaliado no trabalho final.", 
"o trabalho final foi bem desgastante em seu processo. a ideia em si se mostrou valida, porem, deveria ser revista o numero de empresas pesquisadas por cada grupo. nos alunos tivemos imensas dificuldades em ter acesso aos gestores das empresas estudadas, dificultando o nosso trabalho. e o tempo de apresentacao tambem nao era compativel com o tamanho da demanda que tivemos ao longo do semestre. apresentar duas empresas em 10 minutos prejudicou por demais as exposicoes de cada grupo."
)

I want to filter only the rows that match at least partially the following strings>

bom <-c("incrivel", "otim", "muito bo", "bom", "bons", "boas", "boa didatica", 
"gentil", "melhor", "melhores", "excelencia", "excelente", "proveitosa", 
"atencios", "divertid", "boa didatica", "super", "gentil", "amei", 
"adorei", "dispersava")

Using coment %like% bom or coment %in% bom have yielded zero-row data frames or errors, although there is a match in the example.


Solution

  • You can try grep like below

    > grep(paste0(bom, collapse = "|"), coment, value = TRUE)
    [1] "a professora dispersava demais durante as aulas."
    [2] "faltou melhor comunicacao no objetivo do trabalho final."