Сравнение 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

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

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

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
3S Forward 19
4P 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 можно найти здесь .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *