Порівняння 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 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 тут .