拆分包含电子邮件地址的列

Chr*_*ris 5 r

我想在"@"处拆分包含emailaddresses的列.

d$domain<-strsplit( d$email, "@")[[1]]
Run Code Online (Sandbox Code Playgroud)

不行.这样做的正确方法是什么?

had*_*ley 10

str_split_fixedstringr包中使这很容易:

library(stringr)
str_split_fixed(d$email, "@", n = 2)
Run Code Online (Sandbox Code Playgroud)


Noa*_*oah 6

你可以使用正则表达式 - 它们很有趣!

d <- data.frame(email=rep(bob@bob.com, 10))
d$address <- gsub("@.*", "", d$email)
d$domain <- gsub(".*@", "", d$email)
Run Code Online (Sandbox Code Playgroud)


Jub*_*les 1

(也许)需要不止一行:

for (i in 1:length(row.names(d)){    
d$domain[i]<-unlist(strsplit( d$email[i], "@"))[2]
}
Run Code Online (Sandbox Code Playgroud)

(注意:d$email必须是character且不是factor,当您在问题中使用 1 作为索引时,索引 2 将对应于电子邮件的域)

更新:我认为仍然有一种方法可以通过使用“apply”在一行中完成此任务,但我不确定如何做到这一点......还没有。

一行答案(定义函数后): fn <- function(x){unlist(strsplit(x,"@"))[2]} d$domain <- lapply(d$email, fn)