Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R数据帧字符串包含:列1是否包含列2?_R_String_Dataframe_Contains - Fatal编程技术网

R数据帧字符串包含:列1是否包含列2?

R数据帧字符串包含:列1是否包含列2?,r,string,dataframe,contains,R,String,Dataframe,Contains,我有一个包含两列的数据框: Surname Email 1 house greghouse@gmail.com 2 wilson johnwatson@gmail.com 我想创建一个逻辑向量来检查电子邮件中是否包含姓氏。因此,结果应该是: Surname Email CheckEmail 1 house greghouse@gmail.com TRUE 2 wilson johnwatson@gm

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

  Surname                Email
1   house  greghouse@gmail.com
2  wilson johnwatson@gmail.com
我想创建一个逻辑向量来检查电子邮件中是否包含姓氏。因此,结果应该是:

  Surname                Email CheckEmail
1   house  greghouse@gmail.com       TRUE
2  wilson johnwatson@gmail.com      FALSE
我尝试过grep,但grep似乎只能在一个或多个实例中查找一种模式。我特别需要在多个实例中查找多个模式

尝试使用librarystringi和:

尝试使用librarystringi和:


下面是一个使用grepl矢量化的基本R选项:


下面是一个使用grepl矢量化的基本R选项:


下面是使用mapply和grepl的基本R方法:


下面是使用mapply和grepl的基本R方法:


为什么您需要dplyr来实现此目的?应该使用其他软件包是有原因的。在这里,将stringi或其包装器stringr与str_detect函数一起使用是有意义的,而使用dplyr则没有任何意义,因为相同的简单操作将列添加到data.frame中显然可以在base R中进行。您的意思是什么?该行可以工作,它相当于withdat、stri_detect_fixedEmail、姓氏。有功能的是没有必要的,它只是糖。最基本的版本是dat$CheckEmail保留您的答案,因为stringi位很有用。只需删除dplyr部分并进行相应编辑。@nicola完全正确。由于数据帧使用太长的名称,我使用了用于可读性的习惯。为什么为此需要dplyr?应该使用其他包是有原因的。在这里,将stringi或其包装器stringr与str_detect函数一起使用是有意义的,而使用dplyr则没有任何意义,因为相同的简单操作将列添加到data.frame中显然可以在base R中进行。您的意思是什么?该行可以工作,它相当于withdat、stri_detect_fixedEmail、姓氏。有功能的是没有必要的,它只是糖。最基本的版本是dat$CheckEmail保留您的答案,因为stringi位很有用。只需删除dplyr部分并进行相应编辑。@nicola完全正确。我习惯于为数据帧使用太长的名称来提高可读性。我会记住矢量化-看起来很有用。它比使用vapply快吗?@Bazz它可读性很强,但就性能而言,它不会对您有任何帮助。我会记住矢量化-似乎很有用。它比使用vapply快吗?@Bazz它可读性很强,但就性能而言,它不会给你带来任何好处。
> 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
df1$CheckEmail <- stri_detect_fixed(df1$Email, df1$Surname)
df1$CheckEmail <- Vectorize(grepl)(df1$Surname, df1$Email)
transform(df, CheckEmail = mapply(grepl, Surname, Email))
#  Surname                Email CheckEmail
#1   house  greghouse@gmail.com       TRUE
#2  wilson johnwatson@gmail.com      FALSE