Hi, Try: dat <- read.table(text="Emails mal...@gmail.com mah...@gmail.com x...@gmail.com ravi_...@yahoo.com lavk....@rediff.com xy@12_g.com",sep="",header=TRUE,stringsAsFactors=FALSE) vec1 <- gsub("\\.[[:alnum:]]+$","",gsub("^([[:alpha:]]+)(\\d+.*)","\\1_\\2",dat$Emails))
indx1 <- grep("[[:punct:]]+",gsub("\\@.*","",vec1)) res <- setNames(cbind(dat,do.call(rbind,lapply(seq_along(vec1),function(i) if(i %in% indx1){strsplit(vec1[i],"[_@.]")[[1]]} else strsplit(gsub("(.*)(\\@.*)","\\1*\\2",vec1[i]),"[*@]")[[1]]))),c("Emails","f.name","l.name","domain")) res[sapply(res,is.factor)] <- lapply(res[sapply(res,is.factor)],as.character) res # Emails f.name l.name domain #1 mal...@gmail.com Mal 123 gmail #2 mah...@gmail.com Mahi r gmail #3 x...@gmail.com xyz gmail #4 ravi_...@yahoo.com Ravi 123 yahoo #5 lavk....@rediff.com Lavk lll rediff #6 xy@12_g.com xy 12_g A.K. On Thursday, February 6, 2014 4:16 AM, Malyadri Putchakayala <malyadri.putchakay...@nuevora.com> wrote: Hi, Emails mal...@gmail.com mah...@gmail.com ravi_...@yahoo.com lavk....@rediff.com x...@gmail.com xy@12_g.com I need split firstname,lastname,domail(only gmail,not gmail.com),also 123 in last name,so please give me help Output is Emails f.name l.name domain mal...@gmail.com mal 123 gmail mah...@gmail.com mahi r gmail ravi_...@yahoo.com ravi 123 gmail lavk....@rediff.com lavk 111 gmail x...@gmail.com xyz gmail xy@12_g.com xy 12_g Please give me solution ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.