Вы можете сделать что-то вроде этого:
df1 <- data.frame(username=c("John123Doe", "JohnDoe123", "JohnDoe", "JonDoe", "YonDo"))
df2 <- data.frame(First=c("Jack","Joe", "Jon", "John", "Jo"),
Last=c("Doe", "Dohe", "Doer", "Doe", "Do"))
findUser <- function(x) {
res <- apply(df2, 1, function(y) grepl(y["First"], x) & grepl(y["Last"], x))
ifelse(sum(res) > 0, paste(do.call("paste", df2[res,]), collapse=", "), NA)
}
df1$containsUserName <- sapply(df1$username, findUser)
df1
#> username containsUserName
#> 1 John123Doe John Doe, Jo Do
#> 2 JohnDoe123 John Doe, Jo Do
#> 3 JohnDoe John Doe, Jo Do
#> 4 JonDoe Jo Do
#> 5 YonDo <NA>
# or vectorize the function:
FindUser <- Vectorize(findUser)
FindUser(df1$username)
#> John123Doe JohnDoe123 JohnDoe JonDoe
#> "John Doe, Jo Do" "John Doe, Jo Do" "John Doe, Jo Do" "Jo Do"
#> YonDo
#> NA
Создано 2020-08-03 с помощью пакета реплекс (v0.3.0)