提取电子邮件并将其放入相邻行

时间:2018-04-23 11:03:16

标签: r regex dplyr

我有数据集。

For getting Data
 for(let i=0;i<datae.dataa.length;i++)
              {
                chart.series[i].setName(datae.dataa[i].name);
                chart.series[i].setData(datae.dataa[i].data);        
              }

我使用

v1 <- c("I will try to fix you usman@usman.com", "I will try to fix you", "Zombies Zombies xyz@ymail.com") v2 < c("ABC", "XYZ", "Oh Game") dx <- data.frame(v1, v2) 中提取电子邮件

v1

这很有效。

我只想将电子邮件放在regmatches(dx$v1, regexpr("[[:alnum:]]+\\@[[:alpha:]]+\\.com", dx$v1))

中与v2相邻的位置

这样。

dx

看起来非常基本,但我无法弄明白。

1 个答案:

答案 0 :(得分:1)

一种方法可能是

dx$emails <- sapply(dx$v1, function(x) {
  email <- regmatches(x, regexpr("[[:alnum:]]+@[[:alpha:]]+\\.com", x))
  (result <- ifelse(identical(email, character(0)), NA, email))
})

这基本上检查是否找到了至少一个匹配。

<小时/> 如果您不介意安装软件包,请使用stringr并在表达式周围添加括号(@不需要转义):

library(stringr)
dx$emails <- str_extract(dx$v1, "([[:alnum:]]+@[[:alpha:]]+\\.com)")

<小时/> 两者都会产生

                                     v1      v2          emails
1 I will try to fix you usman@usman.com     ABC usman@usman.com
2                 I will try to fix you     XYZ            <NA>
3         Zombies Zombies xyz@ymail.com Oh Game   xyz@ymail.com