HI, Not sure this helps: netw<-read.table(text=" lastname_initial, year Aaron H, 1900 Beecher HW, 1947 Cannon JP, 1985 Stone WC, 1982 van der hoops bf, 1948 NA, 1976 ",sep=",",header=TRUE,stringsAsFactors=FALSE)
res1<-sub("^[[:space:]]*(.*?)[[:space:]]*$","\\1",gsub("\\w+$","",netw[,1])) res1[!is.na(res1)] #[1] "Aaron" "Beecher" "Cannon" "Stone" #[5] "van der hoops" A.K. ----- Original Message ----- From: Biau David <djmb...@yahoo.fr> To: r help list <r-help@r-project.org> Cc: Sent: Sunday, January 13, 2013 3:53 AM Subject: [R] extracting character values Dear all, I have a dataframe of names (netw), with each cell including last name and initials of an author; some cells have NA. I would like to extract only the last name from each cell; this new dataframe is calle 'res' Here is what I do: res <- data.frame(matrix(NA, nrow=dim(netw)[1], ncol=dim(netw)[2])) for (i in 1:x) { wh <- regexpr('[a-z]{3,}', as.character(netw[,i])) res[i] <- substring(as.character(netw[,i]), wh, wh + attr(wh,'match.length')-1) } the problem is that I cannot manage to extract 'complex' names properly such as ' van der hoops bf ': here I only get 'van', the real last name is 'van der hoops' and 'bf' are the initials. Basically the last name has always a minimum of 3 consecutive letters, but may have 3 or more letters separated by one or more space; the cell may start by a space too; initials never have more than 2 letters. Someone would have a nice idea for that? Thanks, David [[alternative HTML version deleted]] ______________________________________________ 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. ______________________________________________ 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.