我正在尝试从csv中删除“错误”的电子邮件地址。我有一列电子邮件,看起来像“abd@no.com”,“123 @ none.com”,“@”或“a”。有各种各样的电子邮件格式,所以我想尝试查找和删除它们。
我的初衷是严格查看电子邮件字符串的末尾 - “@ ...”部分。然后还要查看一个字符的长度,所以如果电子邮件的长度只有1或2,则无效。
如果我有一个糟糕的电子邮件列表,我想生成一个新的电子邮件列表,其中坏的电子邮件被NA替换。
下面是我到目前为止的代码,但它不起作用,并在模式上查找完全匹配,而不仅仅是字符串的结尾。
email_clean <- function(email, invalid = NA)
{
email <- trimws(email) # remove whitespace
email[nchar(email) %in% c(1,2)] <- invalid
bad_email <- c("\\@no.com", "\\@none.com","\\@email.com","\\@noemail.com")
pattern = paste0("(?i)\\b",paste0(bad_email,collapse="\\b|\\b"),"\\b")
emails <-gsub(pattern,"",sapply(csv_file$Email,as.character))
email
}
Cleaned_Email <- email_clean(csv_file$Email)
感谢您的帮助!!!
答案 0 :(得分:2)
你的功能非常接近。请注意一些调整:
email_clean <- function(email, invalid = NA)
{
email <- trimws(email) # remove whitespace
email[nchar(email) %in% c(1,2)] <- invalid
bad_email <- c("\\@no.com", "\\@none.com","\\@email.com","\\@noemail.com")
pattern = paste0("(?i)\\b",paste0(bad_email,collapse="\\b|\\b"),"\\b")
email <-gsub(pattern, invalid, sapply(email,as.character))
unname(email)
}
emails <- c("pierre@gmail.com", "hi@none.com", "@", "a")
email_clean(emails)
# [1] "pierre@gmail.com" NA NA
# [4] NA