Фильтр @ domain.edu из набора данных в R - PullRequest
1 голос
/ 06 марта 2020

У меня есть список адресов электронной почты, например:

emails <- c("john.doe@ivyleague.edu", "education@world.gov", "dalai.lama@peace.org", "invalid.edu", "quant@bigdatacollege.edu", "cookie.monster@sesame.tv")

Мне нужно выбрать только письма из домена .edu.

У меня есть этот код:

edu_emails <- c()
for (email in emails) {
  end <- substr(email, nchar(email)-2, nchar(email))
  if (end == "edu") {
    edu_emails <- c(edu_emails, email)
  }
}

Но это не кажется эффективным, знаете ли вы лучшую систему для этого?

Ответы [ 3 ]

2 голосов
/ 06 марта 2020

R предоставляет интегрированные методы для выполнения этих задач, такие как grepl.

Здесь я покажу вам пример:

# The emails vector
emails <- c("john.doe@ivyleague.edu", "education@world.gov", "dalai.lama@peace.org",
            "invalid.edu", "quant@bigdatacollege.edu", "cookie.monster@sesame.tv")

# Use grepl() to match for .edu addresses more robustly
grepl("@.*\\.edu$", emails)

# Use grep() to match for .edu addresses more robustly, save result to hits
hits <- grep("@.*\\.edu$", emails)

# Subset emails using hits
emails[hits]
0 голосов
/ 06 марта 2020

Вы также можете использовать str_subset из stringr

stringr::str_subset(emails, '@.*\\.edu$')
#[1] "john.doe@ivyleague.edu"   "quant@bigdatacollege.edu"

Это похоже на stringi * stri_subset_regex

stringi::stri_subset_regex(emails, '@.*\\.edu$')
0 голосов
/ 06 марта 2020

Мы можем использовать grep

grep("@.*\\.edu$", emails, value = TRUE)
#[1] "john.doe@ivyleague.edu"   "quant@bigdatacollege.edu"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...