我正在尝试查看用户名数据框是否包含另一个数据框的全名。
我正在遍历每个用户名,并使用 grepl 来查看用户名是否包含不同数据框中的名字和姓氏。
我尝试过:
matches <- 0
for (i in df1$usernames)
{
if (grepl(df2$FIRST_NAME, i, fixed=TRUE) & grepl(df2$LAST_NAME, i, fixed=TRUE))
{
matches <- matches+1
}
}
是否可以对列中的值而不是字符串使用grepl?因为它不起作用-否则,如何查看行的名字和姓氏是否在用户名中。
例如John123Doe, JohnDoe123, JohnDoe
应该与包含"John"
和"Doe"
答案 0 :(得分:0)
您可以执行以下操作:
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
由reprex package(v0.3.0)于2020-08-03创建