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 .