[R] extracting character values

arun smartpink111 at yahoo.com
Sun Jan 13 18:18:44 CET 2013

If you want the NA rows removed, you could, otherwise:
 res<-do.call(data.frame,lapply(netw,function(x) sub("^[[:space:]]*(.*?)[[:space:]]*$","\\1",gsub("\\w+$","",x))))
#             au1       au2       au3
#1           biau     weiss   bhumbra
#2          jones  ferguson       lam
#3  van den hoofs greidanus    garbuz
#4           biau   porcher      <NA>
#5           biau  ferguson     chung
#6       campagna    pessis      biau
#7           biau   leclerc    marmor
#8          weiss      biau   bhumbra
#9      verdegaal     bovee pansuriya
#10          riad      biau      <NA>
 res[complete.cases(res),]#removes the NA rows.

From: Biau David <djmbiau at yahoo.fr>
To: arun <smartpink111 at yahoo.com>; r help list <r-help at r-project.org> 
Sent: Sunday, January 13, 2013 12:02 PM
Subject: Re: [R] extracting character values


here is a minimal working example:

au1 <- c('biau dj', 'jones kb', 'van den hoofs j', ' biau dj', 'biau dj', 'campagna r', 'biau dj', 'weiss kr', 'verdegaal sh', 'riad s')
au2 <- c('weiss kr', 'ferguson pc', ' greidanus nv', ' porcher r', 'ferguson pc', 'pessis e', 'leclerc p', 'biau dj', 'bovee jv', 'biau d')
au3 <- c('bhumbra rs', 'lam b', 'garbuz ds', NA, 'chung p', ' biau dj', 'marmor s', 'bhumbra r', 'pansuriya tc', NA)

netw <- data.frame(au1, au2, au3)
res <- data.frame(matrix(NA, nrow=dim(netw)[1], ncol=dim(netw)[2]))

for (i in 1:dim(netw)[2])
wh <- regexpr('[a-z]{3,}', as.character(netw[,i]))
res[i] <- substring(as.character(netw[,i]), wh, wh + attr(wh,'match.length')-1)

 problem is for author "van den hoofs j" who is only retrieved as 'van'


David Biau

> De : arun <smartpink111 at yahoo.com>
>À : Biau David <djmbiau at yahoo.fr> 
>Envoyé le : Dimanche 13 janvier 2013 17h38
>Objet : Re: [R] extracting character values
> res <- data.frame(matrix(NA, nrow=dim(netw)[1], ncol=dim(netw)[2]))
>#Error in matrix(NA, nrow = dim(netw)[1], ncol = dim(netw)[2]) : 
> # object 'netw' not found
>Can you provide an example dataset of netw?
>----- Original Message -----
>From: Biau David <djmbiau at yahoo.fr>
>To: r help list <r-help at r-project.org>
>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,
>    [[alternative HTML version deleted]]
>R-help at r-project.org mailing list
>PLEASE do read the posting guide http://www.r-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list