Confronto tra grep() e grepl() in r: qual è la differenza?


Due funzioni che le persone spesso confondono in R sono grep() e grepl() . Entrambe le funzioni ti consentono di vedere se esiste un determinato modello in una stringa, ma restituiscono risultati diversi:

  • grepl() restituisce TRUE quando esiste un modello in una stringa.
  • grep() restituisce un vettore di indici di stringa contenente il modello.

L’esempio seguente illustra questa differenza:

 #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

Gli esempi seguenti mostrano quando potresti voler utilizzare una di queste funzioni rispetto all’altra.

Quando usare grepl()

1. Filtra le righe contenenti una determinata stringa

Uno degli usi più comuni di grepl() è filtrare le righe in un frame di dati contenente una determinata stringa:

 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

Correlati: come filtrare le righe contenenti una determinata stringa utilizzando dplyr

Quando usare grep()

1. Seleziona le colonne che contengono una determinata stringa

Puoi usare grep() per selezionare le colonne in un frame di dati contenente una determinata stringa:

 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. Contare il numero di righe contenenti una determinata stringa

Puoi usare grep() per contare il numero di righe in un frame di dati contenente una determinata stringa:

 #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

Puoi trovare altri tutorial su R qui .

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *