Here is a {base} R solution which does precisely what you want,
df6 <- data.frame(name=c("try,xab","xab,Lan","mhy,mun","vgtu,mmc","dgsy,aaf","kull,nnhu","hula,njam","mund,jiha","htfy,ntha","bhr,gydbt","sgyu,hytb","vdti,kula","mftyu,huta","ibdy,vcge","cday,bhsue","ajtu,nudj"), email=c("xab.try@ybcd.com","Lan.xab@ybcd.com","tth.vgu@ybcd.com","mmc.vgtu@ybcd.com","aaf.dgsy@ybcd.com","nnhu.kull@ybcd.com","njam.hula@ybcd.com","jiha.mund@ybcd.com","ntha.htfy@ybcd.com","gydbt.bhr@ybcd.com","hytb.sgyu@ybcd.com","kula.vdti@ybcd.com","huta.mftyu@ybcd.com","ggat.khul@ybcd.com","bhsue.cday@ybcd.com","nudj.ajtu@ybcd.com"))
df6
#> name email
#> 1 try,xab xab.try@ybcd.com
#> 2 xab,Lan Lan.xab@ybcd.com
#> 3 mhy,mun tth.vgu@ybcd.com
#> 4 vgtu,mmc mmc.vgtu@ybcd.com
#> 5 dgsy,aaf aaf.dgsy@ybcd.com
#> 6 kull,nnhu nnhu.kull@ybcd.com
#> 7 hula,njam njam.hula@ybcd.com
#> 8 mund,jiha jiha.mund@ybcd.com
#> 9 htfy,ntha ntha.htfy@ybcd.com
#> 10 bhr,gydbt gydbt.bhr@ybcd.com
#> 11 sgyu,hytb hytb.sgyu@ybcd.com
#> 12 vdti,kula kula.vdti@ybcd.com
#> 13 mftyu,huta huta.mftyu@ybcd.com
#> 14 ibdy,vcge ggat.khul@ybcd.com
#> 15 cday,bhsue bhsue.cday@ybcd.com
#> 16 ajtu,nudj nudj.ajtu@ybcd.com
df6[["match_name"]] <- vapply(mapply(Vectorize(grepl, "pattern"),
lapply(strsplit(df6[["name"]], ","),
function(name) {
paste(rev(name), collapse = "\\.")
}),
df6[["email"]],
SIMPLIFY = FALSE),
all,
integer(1))
df6
#> name email match_name
#> 1 try,xab xab.try@ybcd.com 1
#> 2 xab,Lan Lan.xab@ybcd.com 1
#> 3 mhy,mun tth.vgu@ybcd.com 0
#> 4 vgtu,mmc mmc.vgtu@ybcd.com 1
#> 5 dgsy,aaf aaf.dgsy@ybcd.com 1
#> 6 kull,nnhu nnhu.kull@ybcd.com 1
#> 7 hula,njam njam.hula@ybcd.com 1
#> 8 mund,jiha jiha.mund@ybcd.com 1
#> 9 htfy,ntha ntha.htfy@ybcd.com 1
#> 10 bhr,gydbt gydbt.bhr@ybcd.com 1
#> 11 sgyu,hytb hytb.sgyu@ybcd.com 1
#> 12 vdti,kula kula.vdti@ybcd.com 1
#> 13 mftyu,huta huta.mftyu@ybcd.com 1
#> 14 ibdy,vcge ggat.khul@ybcd.com 0
#> 15 cday,bhsue bhsue.cday@ybcd.com 1
#> 16 ajtu,nudj nudj.ajtu@ybcd.com 1
Slightly different, here is a {base} R solution which has the benefit of matching the names regardless of order (e.g. a,b
would match a.b@c.com
and b.a@c.com
. Also, I think it is better to encode this as a logical
variable rather than an integer
.
df6[["match_name"]] <- vapply(mapply(Vectorize(grepl, "pattern"),
strsplit(df6[["name"]], ","),
df6[["email"]],
SIMPLIFY = FALSE),
all,
logical(1))
df6
#> name email match_name
#> 1 try,xab xab.try@ybcd.com TRUE
#> 2 xab,Lan Lan.xab@ybcd.com TRUE
#> 3 mhy,mun tth.vgu@ybcd.com FALSE
#> 4 vgtu,mmc mmc.vgtu@ybcd.com TRUE
#> 5 dgsy,aaf aaf.dgsy@ybcd.com TRUE
#> 6 kull,nnhu nnhu.kull@ybcd.com TRUE
#> 7 hula,njam njam.hula@ybcd.com TRUE
#> 8 mund,jiha jiha.mund@ybcd.com TRUE
#> 9 htfy,ntha ntha.htfy@ybcd.com TRUE
#> 10 bhr,gydbt gydbt.bhr@ybcd.com TRUE
#> 11 sgyu,hytb hytb.sgyu@ybcd.com TRUE
#> 12 vdti,kula kula.vdti@ybcd.com TRUE
#> 13 mftyu,huta huta.mftyu@ybcd.com TRUE
#> 14 ibdy,vcge ggat.khul@ybcd.com FALSE
#> 15 cday,bhsue bhsue.cday@ybcd.com TRUE
#> 16 ajtu,nudj nudj.ajtu@ybcd.com TRUE
Created on 2020-09-14 by the reprex package (v0.3.0)