Re: [R-br] Regexp no grep para linhas que não iniciam com sequência

Pessoal, obrigado pelas dicas! Tive sucesso com a sugestão do Marcus e acabei encontrando mais uma forma, transcrita abaixo. test <- c("SPA100", "MSA200", "MSB300", "MSC400", "MSC500", "PRA100", "PRC200", "MGV100", "MTJ400", "MTK500") grep("MSC", test, val=T, invert=T) # [1] "SPA100" "MSA200" "MSB300" "PRA100" "PRC200" "MGV100" "MTJ400" "MTK500" grep("^(?!MSC)", test, val=T, perl=T) # [1] "SPA100" "MSA200" "MSB300" "PRA100" "PRC200" "MGV100" "MTJ400" "MTK500" ================================================ Éder Comunello Researcher at Brazilian Agricultural Research Corporation (Embrapa) DSc in Agricultural Systems Engineering (USP/Esalq) MSc in Environ. Sciences (UEM), Agronomist (UEM) --- Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00 Em 4 de outubro de 2016 10:25, Tiago Fragoso <mingote@gmail.com> escreveu:
Oi
Estou longe do R no momento, mas na sua segunda solução, você tentou usar a regex "^[^MSC]{0,3}"?
Em princípio, ela força o início da string e identifica todos os caracteres fora do conjunto MSC, para valores entre 0 e 3 ocorrências.
Note que nesse caso a regex vai identificar strings iniciadas em M,S ou C. Me parece que você tem os padrões M, MS ou MSC, então talvez a regex
"^[^M|^MS|^MSC]"
resolva.
On Oct 4, 2016 9:49 AM, "Éder Comunello via R-br" < r-br@listas.c3sl.ufpr.br> wrote:
Senhores, bom dia!
Considerando o vetor:
test <- c("SPA100", "MSA200", "MSB300", "MSC400", "MSC500", "PRA100", "PRC200", "MGV100", "MTJ400", "MTK500")
Posso obter facilmente os valores iniciados com a sequência "MS": grep("^MS", test, val=T)
# [1] "MSA200" "MSB300" "MSC400" "MSC500"
Uma primeira tentativa, sem sucesso, para obter linhas que não iniciam com a sequência foi: grep("^!(MS)", test, val=T) # character(0)
Consegui uma solução estranha com: grep("^[^M]|^M[^S]", test, val=T)
# [1] "SPA100" "PRA100" "PRC200" "MGV100" "MTJ400" "MTK500"
Mas essa solução é limitada quando usando strings maiores, tal como "MSC".
Embora existam alternativas como: test[-grep("^MSC", test)]
# [1] "SPA100" "MSA200" "MSB300" "PRA100" "PRC200" "MGV100" "MTJ400" "MTK500"
Gostaria de saber se há uma forma fácil de fazer isso usando diretamente uma regexp.
Grato,
================================================ Éder Comunello Researcher at Brazilian Agricultural Research Corporation (Embrapa) DSc in Agricultural Systems Engineering (USP/Esalq) MSc in Environ. Sciences (UEM), Agronomist (UEM) --- Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>| ================================================ GEO, -22.2752, -54.8182, 408m UTC-04:00 / DST: UTC-03:00
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (1)
-
Éder Comunello