r - 如何检查数据框行的一个元素中的字符串是否在另一个元素中

标签 r grepl

我想查看有多少电子邮件地址包含电子邮件所有者的姓氏。

数据框中的每一行都包含一个姓氏和一个电子邮件地址。我想添加第三列,其中包含"is"或“否”,表明该行的电子邮件中存在姓氏。

使用 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

关于r - 如何检查数据框行的一个元素中的字符串是否在另一个元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368894/

相关文章:

R 动态重命名列并忽略缺失

R - 查找包含所有字符串/模式的所有向量元素 - str_detect grep

r - 在列表 R 中使用正则表达式查找连字符的单词

r - 测试单词是否在字符串中(grepl、fuzzyjoin?)

用于特定和重复模式的正则表达式 grepl

r - igraph R中从根到叶的有向 TreeMap 中的所有路径

R Markdown 水平规则也适用于 LaTeX pdf?

r - 带有代表其他向量的独特组合的字母的新向量

R biglm 与分类变量

r - mutate & rowwise & grepl 的替代品