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

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *