Hi:

This seems to be easier to pull off if x is a data frame rather than a
matrix.
x <- data.frame(GCM = c("BA1y1","BA2y3","C3A1r1y1","C3A2r2y2t4","C3r2y1y1"),
                               y = c(1:3, 11, 12), stringsAsFactors = FALSE)
x$val <- as.numeric(substring(lapply(strsplit(x$GCM, 'y'), '[', 2), 1, 1))

This assumes you want the numeric value after the first occurrence of y. It
works
as follows:
       * use strsplit() to split the GCM string using y as a separator,
generating
         list object;
       * run lapply() over the list and extract the second element, which is
the string
          following the first occurrence of y;
       * use substring() to extract the first character and then coerce the
result to be
         numeric.

Output:

> x
         GCM  y val
a      BA1y1  1   1
b      BA2y3  2   3
c   C3A1r1y1  3   1
d C3A2r2y2t4 11   2
e   C3r2y1y1 12   1

HTH,
Dennis

On Mon, Apr 26, 2010 at 10:10 PM, Daisy Englert Duursma <
daisy.duur...@gmail.com> wrote:

> Hello,
>
> Thanks for your help, I have played around with the suggestion a bit
> but I can still not sub-setting in the way I need
>
> If I have a matrix x as follows:
>
>  > x <- matrix(c("BA1y1","BA2y3","C3A1r1y1","C3A2r2y2t4","C3r2y1y1",1,2,3,
> 11,12)
> , nrow=5, ncol=2,
> dimnames=list(c("a","b","c","d","e"), c("GCM","y")))
>  > x
>  GCM          y
> a "BA1y1"      "1"
> b "BA2y3"      "2"
> c "C3A1r1y1"   "3"
> d "C3A2r2y2t4" "11"
> e "C3r2t1y1"   "12"
>
> and I want to loop through 3 subsets based on the numeric value after
> the y, how do I do this?
>
> What I currently have is:
> > year <-c("1", "2", "3")
> > for (y in year) {
> > subx <- x[sapply(strsplit(as.character(x$GCM), ""), function(zzz)zzz[5]
> == y),]
> }
> Basically this loops through and subsets the rows when the 5th
> character has the defined y value (1, 2,or 3). The problem is that y
> can occur anywhere in the GCM value.
>
> Thanks for the help.
> Daisy
> --
> Daisy Englert Duursma
>
> Room E8C156
> Dept. Biological Sciences
> Macquarie University  NSW  2109
> Australia
>
> Tel +61 2 9850 9256
>
> ______________________________________________
> 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.
>

        [[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.

Reply via email to