Сравнение 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 можно найти здесь .