Porównanie grep() i grepl() w r: jaka jest różnica?


Dwie funkcje, które ludzie często mylą w R, to grep() i grepl() . Obie funkcje pozwalają sprawdzić, czy w ciągu znaków istnieje określony wzorzec, ale zwracają różne wyniki:

  • grepl() zwraca wartość PRAWDA, jeśli w ciągu znaków istnieje wzorzec.
  • grep() zwraca wektor indeksów łańcuchowych zawierających wzorzec.

Poniższy przykład ilustruje tę różnicę:

 #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

Poniższe przykłady pokazują, kiedy możesz chcieć użyć jednej z tych funkcji zamiast drugiej.

Kiedy używać grepl()

1. Filtruj wiersze zawierające określony ciąg

Jednym z najczęstszych zastosowań grepl() jest filtrowanie wierszy w ramce danych zawierającej określony ciąg znaków:

 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

Powiązane: Jak filtrować wiersze zawierające określony ciąg za pomocą dplyr

Kiedy używać grep()

1. Wybierz kolumny zawierające określony ciąg

Możesz użyć grep() , aby wybrać kolumny w ramce danych zawierającej określony ciąg:

 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. Policz liczbę linii zawierających określony ciąg

Możesz użyć grep() do zliczenia liczby linii w ramce danych zawierającej określony ciąg:

 #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

Więcej samouczków dotyczących języka R można znaleźć tutaj .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *