Dear all I have got this kind of data temp <- structure(c(1L, 1L, 1L, 1L, 1L, 16L, 6L, 6L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 11L, 10L, 16L, 16L, 16L, 21L, 16L, 16L, 16L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 1L, 1L, 7L, 3L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 1L, 1L, 4L, 10L, 8L, 2L, 1L, 4L, 6L, 2L, 1L, 1L, 1L, 9L, 4L, 10L, 1L, 1L, 1L, 1L, 1L, 1L, 6L, 4L, 6L, 6L, 8L, 8L, 6L, 6L, 6L, 10L, 11L, 1L, 1L, 2L, 4L, 2L, 7L, 10L, 2L, 16L, 10L, 6L, 10L, 1L, 4L, 3L, 17L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 3L, 2L, 6L, 8L, 4L, 1L, 1L, 8L, 8L, 6L, 3L, 4L, 8L, 6L, 4L, 2L, 6L, 2L, 4L, 6L, 4L, 4L, 2L, 6L, 4L, 2L, 3L, 4L, 6L, 8L, 8L, 10L, 6L, 4L, 10L, 4L, 4L, 4L, 2L, 4L, 4L, 2L, 8L, 10L, 11L, 11L, 10L, 1L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 13L, 13L, 14L, 8L, 3L, 5L, 3L, 3L, 1L, 1L, 1L, 1L, 4L, 1L, 12L, 16L, 26L, 16L, 1L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 14L, 15L, 15L, 18L, 23L, 20L, 17L, 20L, 19L, 24L, 24L, 24L, 23L, 20L, 17L, 17L, 17L, 27L, 17L, 17L, 22L, 17L, 17L, 24L, 22L, 22L, 19L, 23L, 23L, 25L, 5L, 28L), .Label = c("0.0000", "0.0100", "0.0100-", "0.0200", "0.0200-", "0.0300", "0.0300-", "0.0400", "0.0400-", "0.0500", "0.0600", "0.0600-", "0.0700", "0.0800", "0.0900", "0.1000", "0.1000-", "0.1100", "0.1100-", "0.1200-", "0.1300", "0.1300-", "0.1400-", "0.1500-", "0.1800-", "0.2000", "0.2000-", "0.4000-"), class = "factor") As you can see, negative values have minus sign at the end of value (strange but sometimes used). I can find those values by grep("-",levels(temp)) and manipulate it to strip "-" sign, put "-"sign before the value by paste and change it to numeric as.numeric(paste("-", gsub("-", "", levels(temp)[grep("-",levels(temp))]), sep="")) but Is there any kind of possible regular expression to do it in one step? E.g. I would like to end with some function which can take whole vector temp and change it to numeric. Something like as.numeric(gsub("some clever regular expression", temp)) Thank you Petr
Use backreference: as.numeric(gsub("^(.*)-$", "-\\1", as.character(temp))) -- Noia Raindrops noia.raindrops at gmail.com
Thank you I knew that somebody can use power of gsub better than myself. Petr> -----Original Message----- > From: Noia Raindrops [mailto:noia.raindrops at gmail.com] > Sent: Tuesday, August 21, 2012 12:33 PM > To: PIKAL Petr > Cc: r-help > Subject: Re: [R] reexpr transform nonumeric values to numeric > > Use backreference: > > as.numeric(gsub("^(.*)-$", "-\\1", as.character(temp))) > > -- > Noia Raindrops > noia.raindrops at gmail.com > >
HI, Try this: as.numeric(gsub("^([0-9].[0-9]{1,4})-$","-\\1",temp)) #or as.numeric(gsub("^([[:digit:]].[[:digit:]]{1,4})-$","-\\1",temp)) #or as.numeric(gsub("^([[:digit:]]..*{1,4})-$","-\\1",temp)) #or as.numeric(gsub("^(.*.[[:digit:]]{1,4})-$","-\\1",temp)) A.K. ----- Original Message ----- From: PIKAL Petr <petr.pikal at precheza.cz> To: r-help <r-help at stat.math.ethz.ch> Cc: Sent: Tuesday, August 21, 2012 6:16 AM Subject: [R] reexpr transform nonumeric values to numeric Dear all I have got this kind of data temp <- structure(c(1L, 1L, 1L, 1L, 1L, 16L, 6L, 6L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 11L, 10L, 16L, 16L, 16L, 21L, 16L, 16L, 16L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 1L, 1L, 7L, 3L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 1L, 1L, 4L, 10L, 8L, 2L, 1L, 4L, 6L, 2L, 1L, 1L, 1L, 9L, 4L, 10L, 1L, 1L, 1L, 1L, 1L, 1L, 6L, 4L, 6L, 6L, 8L, 8L, 6L, 6L, 6L, 10L, 11L, 1L, 1L, 2L, 4L, 2L, 7L, 10L, 2L, 16L, 10L, 6L, 10L, 1L, 4L, 3L, 17L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 3L, 2L, 6L, 8L, 4L, 1L, 1L, 8L, 8L, 6L, 3L, 4L, 8L, 6L, 4L, 2L, 6L, 2L, 4L, 6L, 4L, 4L, 2L, 6L, 4L, 2L, 3L, 4L, 6L, 8L, 8L, 10L, 6L, 4L, 10L, 4L, 4L, 4L, 2L, 4L, 4L, 2L, 8L, 10L, 11L, 11L, 10L, 1L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 13L, 13L, 14L, 8L, 3L, 5L, 3L, 3L, 1L, 1L, 1L, 1L, 4L, 1L, 12L, 16L, 26L, 16L, 1L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 14L, 15L, 15L, 18L, 23L, 20L, 17L, 20L, 19L, 24L, 24L, 24L, 23L, 20L, 17L, 17L, 17L, 27L, 17L, 17L, 22L, 17L, 17L, 24L, 22L, 22L, 19L, 23L, 23L, 25L, 5L, 28L), .Label = c("0.0000", "0.0100", "0.0100-", "0.0200", "0.0200-", "0.0300", "0.0300-", "0.0400", "0.0400-", "0.0500", "0.0600", "0.0600-", "0.0700", "0.0800", "0.0900", "0.1000", "0.1000-", "0.1100", "0.1100-", "0.1200-", "0.1300", "0.1300-", "0.1400-", "0.1500-", "0.1800-", "0.2000", "0.2000-", "0.4000-"), class = "factor") As you can see, negative values have minus sign at the end of value (strange but sometimes used). I can find those values by grep("-",levels(temp)) and manipulate it to strip "-" sign, put "-"sign before the value by paste and change it to numeric as.numeric(paste("-", gsub("-", "", levels(temp)[grep("-",levels(temp))]), sep="")) but Is there any kind of possible regular expression to do it in one step? E.g. I would like to end with some function which can take whole vector temp and change it to numeric. Something like as.numeric(gsub("some clever regular expression", temp)) Thank you Petr ______________________________________________ R-help at 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.
Thanks I new that gsub shall be involved somehow, but the key is to use backreference "-\\1". Regards Petr> -----Original Message----- > From: arun [mailto:smartpink111 at yahoo.com] > Sent: Tuesday, August 21, 2012 2:51 PM > To: PIKAL Petr > Cc: R help > Subject: Re: [R] reexpr transform nonumeric values to numeric > > HI, > Try this: > as.numeric(gsub("^([0-9].[0-9]{1,4})-$","-\\1",temp)) > #or > as.numeric(gsub("^([[:digit:]].[[:digit:]]{1,4})-$","-\\1",temp)) > #or > as.numeric(gsub("^([[:digit:]]..*{1,4})-$","-\\1",temp)) > #or > as.numeric(gsub("^(.*.[[:digit:]]{1,4})-$","-\\1",temp)) > A.K. > > > > > ----- Original Message ----- > From: PIKAL Petr <petr.pikal at precheza.cz> > To: r-help <r-help at stat.math.ethz.ch> > Cc: > Sent: Tuesday, August 21, 2012 6:16 AM > Subject: [R] reexpr transform nonumeric values to numeric > > Dear all > > I have got this kind of data > > temp <- structure(c(1L, 1L, 1L, 1L, 1L, 16L, 6L, 6L, 16L, 16L, 16L, > 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 11L, 10L, 16L, 16L, > 16L, 21L, 16L, 16L, 16L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 1L, 1L, 7L, > 3L, 1L, 1L, 1L, 1L, 3L, 3L, 1L, 1L, 1L, 4L, 10L, 8L, 2L, 1L, 4L, 6L, > 2L, 1L, 1L, 1L, 9L, 4L, 10L, 1L, 1L, 1L, 1L, 1L, 1L, 6L, 4L, 6L, 6L, > 8L, 8L, 6L, 6L, 6L, 10L, 11L, 1L, 1L, 2L, 4L, 2L, 7L, 10L, 2L, 16L, > 10L, 6L, 10L, 1L, 4L, 3L, 17L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 3L, 2L, 6L, > 8L, 4L, 1L, 1L, 8L, 8L, 6L, 3L, 4L, 8L, 6L, 4L, 2L, 6L, 2L, 4L, 6L, 4L, > 4L, 2L, 6L, 4L, 2L, 3L, 4L, 6L, 8L, 8L, 10L, 6L, 4L, 10L, 4L, 4L, 4L, > 2L, 4L, 4L, 2L, 8L, 10L, 11L, 11L, 10L, 1L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, > 1L, 1L, 13L, 13L, 14L, 8L, 3L, 5L, 3L, 3L, 1L, 1L, 1L, 1L, 4L, 1L, 12L, > 16L, 26L, 16L, 1L, 1L, 1L, 1L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 14L, > 15L, 15L, 18L, 23L, 20L, 17L, 20L, 19L, 24L, 24L, 24L, 23L, 20L, 17L, > 17L, 17L, 27L, 17L, 17L, 22L, 17L, 17L, 24L, 22L, 22L, 19L, 23L, 23L, > 25L, 5L, 28L), .Label = c("0.0000", "0.0100", "0.0100-", "0.0200", > "0.0200-", "0.0300", "0.0300-", "0.0400", "0.0400-", "0.0500", > "0.0600", "0.0600-", "0.0700", "0.0800", "0.0900", "0.1000", "0.1000-", > "0.1100", "0.1100-", "0.1200-", "0.1300", "0.1300-", "0.1400-", > "0.1500-", "0.1800-", "0.2000", "0.2000-", "0.4000-"), class > "factor") > > As you can see, negative values have minus sign at the end of value > (strange but sometimes used). > > I can find those values by > grep("-",levels(temp)) and manipulate it to strip "-" sign, put "-"sign > before the value by paste and change it to numeric as.numeric(paste("- > ", gsub("-", "", levels(temp)[grep("-",levels(temp))]), sep="")) > > but Is there any kind of possible regular expression to do it in one > step? E.g. I would like to end with some function which can take whole > vector temp and change it to numeric. > > Something like > > as.numeric(gsub("some clever regular expression", temp)) > > Thank you > Petr > > ______________________________________________ > R-help at 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.