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 .