Vergelijking van grep() en grepl() in r: wat is het verschil?


Twee functies die mensen vaak verwarren in R zijn grep() en grepl() . Met beide functies kunt u zien of een bepaald patroon in een string voorkomt, maar ze geven verschillende resultaten:

  • grepl() retourneert TRUE als er een patroon in een string bestaat.
  • grep() retourneert een vector van tekenreeksindexen die het patroon bevatten.

Het volgende voorbeeld illustreert dit verschil:

 #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

De volgende voorbeelden laten zien wanneer u een van deze functies mogelijk boven de andere wilt gebruiken.

Wanneer gebruik je grepl()

1. Filter rijen die een bepaalde string bevatten

Een van de meest voorkomende toepassingen van grepl() is het filteren van rijen in een dataframe dat een bepaalde string bevat:

 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

Gerelateerd: Rijen filteren die een bepaalde tekenreeks bevatten met behulp van dplyr

Wanneer gebruik je grep()

1. Selecteer kolommen die een bepaalde tekenreeks bevatten

Je kunt grep() gebruiken om kolommen te selecteren in een dataframe dat een bepaalde string bevat:

 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. Tel het aantal regels dat een bepaalde string bevat

Je kunt grep() gebruiken om het aantal regels in een dataframe te tellen dat een bepaalde string bevat:

 #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

Meer R-tutorials vindt u hier .

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert