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