R数据框架字符串包含:第1列是否包含第2列?

gma*_*ais 1 string r contains dataframe

我有一个包含两列的数据框:

  Surname                Email
1   house  greghouse@gmail.com
2  wilson johnwatson@gmail.com
Run Code Online (Sandbox Code Playgroud)

我想创建一个逻辑向量来检查是否Surname包含在中Email.结果应该是:

  Surname                Email CheckEmail
1   house  greghouse@gmail.com       TRUE
2  wilson johnwatson@gmail.com      FALSE
Run Code Online (Sandbox Code Playgroud)

我试过grep但似乎grep只能在一个或多个实例中查找一个模式.我特别需要在多个实例中查找多个模式.

> grep(df1$Surname,df1$Email)
[1] 1
Warning message:
In grep(df1$Surname, df1$Email) :
  argument 'pattern' has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)

Mar*_*rta 6

尝试使用library("stringi")和:

df1$CheckEmail <- stri_detect_fixed(df1$Email, df1$Surname)
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因应该使用额外的包.在这里,使用`stringi`(或其包装`stringr`和`str_detect`函数)是有道理的,而`dplyr`的使用没有任何意义,因为相同的简单操作(向`数据添加一列). frame`)显然可以在`base`中制作. (5认同)
  • 为什么你需要dplyr呢? (3认同)
  • 完全是@nicola.我使用它是为了可读性(习惯使用太长的数据帧名称). (2认同)

tal*_*lat 6

下面是一个使用基础R的方法mapplygrepl:

transform(df, CheckEmail = mapply(grepl, Surname, Email))
#  Surname                Email CheckEmail
#1   house  greghouse@gmail.com       TRUE
#2  wilson johnwatson@gmail.com      FALSE
Run Code Online (Sandbox Code Playgroud)