r - 如何检查数据框行的一个元素中的字符串是否在另一个元素中
问题描述
我想查看有多少电子邮件地址包含电子邮件所有者的姓氏。
数据框中的每一行都包含一个姓氏和一个电子邮件地址。我想添加带有“是”或“否”的第三列,表示该行电子邮件中姓氏的存在。
使用 for 循环效果很好......但我不禁想到可能有更好的 R 解决方案。关于如何使它更优雅的任何建议?
vec1 <- c("foo", "smith")
vec2 <- c("sfoo@x.com", "xxx@y.com")
df <- data.frame(vec1,vec2)
for(i in 1:nrow(df)) {
if (grepl(df$vec1[i], df$vec2[i]) == TRUE) {
df$lastNameInEmail[i] <- "Yes"
} else {
df$lastNameInEmail[i] <- "No"
}
}
vec1 vec2 lastNameInEmail
1 foo sfoo@x.com Yes
2 smith xxx@y.com No
解决方案
你可以使用stringr
str_detect
stringr::str_detect(vec2,paste(vec1,collapse = '|'))
[1] TRUE FALSE