Сравнение grep() и grepl() в R: в чем разница?


В R люди часто путают две функции: grep() и grepl().Обе функции позволяют вам увидеть, существует ли определенный шаблон в строке символов, но они возвращают разные результаты:

  • grepl() возвращает TRUE, если в строке символов существует шаблон.
  • grep() возвращает вектор индексов строк символов, содержащих шаблон.

Следующий пример иллюстрирует эту разницу:

#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

В следующих примерах показано, когда вы можете захотеть использовать одну из этих функций вместо другой.

Когда использовать grepl()

1. Отфильтруйте строки, содержащие определенную строку

Одним из наиболее распространенных применений grepl() является фильтрация строк во фрейме данных, содержащих определенную строку:

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

Связанный: Как отфильтровать строки, содержащие определенную строку, с помощью dplyr

Когда использовать grep()

1. Выберите столбцы, содержащие определенную строку

Вы можете использовать grep() для выбора столбцов во фрейме данных, которые содержат определенную строку:

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
3 S Forward 19
4 P Forward 22
5 Center 32

2. Подсчитайте количество строк, содержащих определенную строку

Вы можете использовать grep() для подсчета количества строк во фрейме данных, содержащих определенную строку:

#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

Вы можете найти больше руководств по R здесь .