Функция grep() в R — сопоставление с шаблоном и поиск
Функция grep() в R используется для поиска в символьном векторе позиций или значений, соответствующих заданному шаблону.
grepl() — это её логическая версия, возвращающая TRUE/FALSE. Обе поддерживают регулярные выражения.
Синтаксис функции grep() выглядит следующим образом:
grep(pattern, x, value = FALSE, ignore.case = FALSE) grepl(pattern, x, ignore.case = FALSE)
Описание параметра:
patternШаблон для сопоставления (поддерживает регулярные выражения).
xВходной символьный вектор.
valueВозвращать ли совпавшее значение (TRUE) вместо только индекса (FALSE). По умолчанию — FALSE.
ignore.caseИгнорировать ли регистр.
Пример
fruits <- c("яблоко", "банан", "апельсин", "grape", "pineapple", "mango")
# grep: вернуть индексы, содержащие "ap"
print("Индексы, содержащие 'ap':")
print(grep("ap", fruits))
# grep с value: возвращает совпавшие значения
print("Фрукты, содержащие 'ap':")
print(grep("ap", fruits, value = TRUE))
# grepl: возвращает логический вектор
print("Содержит ли 'ap':")
print(grepl("ap", fruits))
# grep: вернуть индексы, содержащие "ap"
print("Индексы, содержащие 'ap':")
print(grep("ap", fruits))
# grep с value: возвращает совпавшие значения
print("Фрукты, содержащие 'ap':")
print(grep("ap", fruits, value = TRUE))
# grepl: возвращает логический вектор
print("Содержит ли 'ap':")
print(grepl("ap", fruits))
Выполнение приведённого выше кода даёт следующий результат:
[1] "包含 'ap' 的索引:" [1] 1 4 5 [1] "包含 'ap' 的水果:" [1] "apple" "grape" "pineapple" [1] "是否包含 'ap':" [1] TRUE FALSE FALSE TRUE TRUE FALSE
grepl() в сочетании с логической индексацией может фильтровать строки в таблице данных:
Пример
# Данные пользователей с адресами электронной почты
df <- data.frame(
Name= c("Zhang San", "Li Si", "Wang Wu", "Чжао Лю"),
Email= c("[email protected]", "[email protected]",
"[email protected]", "[email protected]"),
stringsAsFactors = FALSE
)
# Фильтровать пользователей с адресами электронной почты, содержащими example
example_users <- df[grepl("example", df$Email), ]
print("пример пользователей электронной почты:")
print(example_users)
df <- data.frame(
Name= c("Zhang San", "Li Si", "Wang Wu", "Чжао Лю"),
Email= c("[email protected]", "[email protected]",
"[email protected]", "[email protected]"),
stringsAsFactors = FALSE
)
# Фильтровать пользователей с адресами электронной почты, содержащими example
example_users <- df[grepl("example", df$Email), ]
print("пример пользователей электронной почты:")
print(example_users)
Выполнение приведённого выше кода даёт следующий результат:
[1] "example 邮箱的用户:" 姓名 邮箱 1 张三 [email protected] 3 王五 [email protected]Другие расширения
Примеры на языке R