Comparação de grep() e grepl() em r: qual a diferença?


Duas funções que as pessoas costumam confundir em R são grep() e grepl() . Ambas as funções permitem ver se existe um determinado padrão em uma string, mas retornam resultados diferentes:

  • grepl() retorna TRUE quando existe um padrão em uma string.
  • grep() retorna um vetor de índices de string contendo o padrão.

O exemplo a seguir ilustra essa diferença:

 #create a vector of data
data <- c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center')

grep ('Guard', data)
[1] 1 2

grepl ('Guard', data) 
[1] TRUE TRUE FALSE FALSE FALSE

Os exemplos a seguir mostram quando você pode querer usar uma dessas funções em vez da outra.

Quando usar grepl()

1. Filtre as linhas que contêm uma determinada string

Um dos usos mais comuns de grepl() é filtrar linhas em um quadro de dados contendo uma determinada string:

 library(dplyr)

#create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#filter rows that contain the string 'Guard' in the player column
df %>% filter( grepl ('Guard', player))

   player points rebounds
1 P Guard 12 5
2 S Guard 15 7

Relacionado: Como filtrar linhas contendo uma determinada string usando dplyr

Quando usar grep()

1. Selecione colunas que contenham uma determinada string

Você pode usar grep() para selecionar colunas em um quadro de dados contendo uma determinada string:

 library(dplyr)

#create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#select columns that contain the string 'p' in their name
df %>% select( grep ('p', colnames(df)))

     player points
1 P Guard 12
2 S Guard 15
3S Forward 19
4P Forward 22
5 Center 32

2. Conte o número de linhas que contêm uma determinada string

Você pode usar grep() para contar o número de linhas em um quadro de dados contendo uma determinada string:

 #create data frame
df <- data.frame(player = c('P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center'),
                 points = c(12, 15, 19, 22, 32),
                 rebounds = c(5, 7, 7, 12, 11))

#count how many rows contain the string 'Guard' in the player column
length( grep ('Guard', df$player))

[1] 2

Você pode encontrar mais tutoriais de R aqui .

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *