首页 > 解决方案 > R中两列之间的部分字符串匹配

问题描述

我正在尝试验证列表的电子邮件是否正确。我在想我可以在电子邮件和名称列之间进行部分字符串匹配,并在新列中返回一个逻辑向量 (TRUE/FALSE)。

在下面的示例中,只有第 3 行和第 5 行有正确的电子邮件,并且这些行的输出将为“TRUE”。我尝试了以下方法,但没有奏效:

>for (i in Test$LastName) {
 Test$Match <- agrepl(i, Test$Email, ignore.case = TRUE)
}

>Test$Email %in% Test$LastName

也欢迎任何其他建议。谢谢!

在此处输入图像描述

标签: rstring-matching

解决方案


基本 R 选项是使用grepl+mapply

Test <- within(Test, Match <- mapply(grepl,paste(FirstNmae,LastName,sep = "|"),Email,ignore.case = TRUE))

这样

> Test
  FirstNmae LastName                    Email Match
1    Audrey      Low         T.Rose@gmail.com FALSE
2     Tammy     Rose          A.Low@gmail.com FALSE
3    Stacey     Lock     stacy.lock@gmail.com  TRUE
4    Judson   Porter beth.mccormick@gmail.com FALSE
5    Kellie     Sims         k.sims@gmail.com  TRUE

数据

Test <- data.frame(FirstNmae = c("Audrey","Tammy","Stacey","Judson","Kellie"),
                 LastName = c("Low","Rose","Lock","Porter","Sims"),
                 Email = c("T.Rose@gmail.com","A.Low@gmail.com","stacy.lock@gmail.com","beth.mccormick@gmail.com","k.sims@gmail.com"))


推荐阅读