我想在"@"处拆分包含emailaddresses的列.
d$domain<-strsplit( d$email, "@")[[1]]
Run Code Online (Sandbox Code Playgroud)
不行.这样做的正确方法是什么?
had*_*ley 10
str_split_fixed从stringr包中使这很容易:
library(stringr)
str_split_fixed(d$email, "@", n = 2)
Run Code Online (Sandbox Code Playgroud)
你可以使用正则表达式 - 它们很有趣!
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)
(也许)需要不止一行:
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)