从列中提取数据并将提取填充为现有数据框中的新变量

时间:2018-05-14 16:27:03

标签: r dplyr tidyr

我有一个我需要按地址和域分割的电子邮件地址数据框。我找到了tidyr和它的单独命令,但是当我单独运行时,我要么将数据帧添加到我的数据帧,称为“new_var”,要么将正确分离的数据打印到控制台中。

我需要将分隔的数据作为新列添加到现有数据框中。

我正在使用像

这样的东西
y <- rep(NA_real_, length(data$x))
for(i in seq_along(data$x)) {
  tryCatch({
    y[i] <- my_func_vect(data$x[i])
  }, error = function(err){})
}
y
# Result is: 1 NA 2 4

我需要将结果添加到我的'email_data'DF中的两列,一个命名地址和一个命名域。

我在这里和其他地方看过,我试图添加使用粘贴(而不是c(但是没有这样做。

感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:1)

提供的两个答案都很有帮助(并且赞赏),但是我没有得到我所需要的,这部分是我的错。我真正所需要的只是电子邮件地址的域名部分。

我能够从email_address字段中提取它并为其提供自己的列,其中包含以下内容:

email_data$domain1 <- substring(email_data$EMAIL_ADDRESS, 
regexpr("@", email_data$EMAIL_ADDRESS) + 1)

substring(text, start, stop)
text = email_address field
start = +1 character after @ symbol
stop = blank b/c I want everything after the @ symbol

答案 1 :(得分:0)

这是以前机器学习问题的一个例子:

merc1 <- merc %>% separate(category_name,into=c("cn1","cn2","cn3"),sep="/",extra="drop")是您的输入列字符?

彼得

答案 2 :(得分:0)

您可以使用以下代码

library(stringr)    
email_data <- str_split_fixed(email_data$EMAIL_ADDRESS, "@", 2)
colnames(email_data) <- c("Address","Domain")

我已经测试了这个,这将有效。

编辑:添加示例

Name <- c('testname', 'testname1234')
EMAIL_ADDRESS <- c('pk@sss.com', 'qwert@tyuu.com')
Init_frame <- data.frame(Name,EMAIL_ADDRESS )
Init_frame

email_data <- data.frame(EMAIL_ADDRESS)
library(stringr)
email_data <- str_split_fixed(email_data$EMAIL_ADDRESS, "@", 2)
colnames(email_data) <- c("Address","Domain")
email_data

Init_frame <- data.frame (Name,email_data)
Init_frame