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 .