Hello arun

Thanks for the answers.
I understand the answer to question 2.
However, about question 1, sorry I did not clarify the question.

1. If the row names are 1, 2, and 4 etc (numbers) instead of GID 1, GID 2,
and GID 3,
   is there any modification in need for the code ?
   The original data looks like below.

Original matrix

GID       D0989   D9820  D5629  D4327  D2134

1               1        0        0       1      0

2               0        1        1       0      0

4               0        0        1       0      0

5               1        1        0       0      0

7               0        1        0       0      1



Resulting matrix

                D0989   D9820  D5629  D4327  D2134

Island A   1        1       0       1       0

Island B   0        1       1       0       1


Elaine


On Thu, Aug 1, 2013 at 7:15 AM, arun <smartpink...@yahoo.com> wrote:

> Hi Elaine,
>
> In that case:
> Do you have "GID" in the "IslandA" and "IslandB"s?
>
> IslandA<-c("GID 1", "GID 5")
> IslandB<- c("GID 2", "GID 4", "GID 7")
>
> If there is no change in the two "Islands", then using the same dataset:
>
> mat1<- as.matrix(read.table(text="
> D0989  D9820  D5629  D4327  D2134
> GID_1    1        0        0      1      0
> GID_2    0        1        1      0      0
> GID_4    0        0        1      0      0
> GID_5    1        1        0      0      0
> GID_7    0        1        0      0      1
> ",sep="",header=TRUE))
>
> row.names(mat1)<- gsub(".*\\_","",row.names(mat1)) #to replace the "GID_"
> from the row.names()
>  mat1
> #  D0989 D9820 D5629 D4327 D2134
> #1     1     0     0     1     0
> #2     0     1     1     0     0
> #4     0     0     1     0     0
> #5     1     1     0     0     0
> #7     0     1     0     0     1
>  IslandA<-c("GID 1", "GID 5")
>  IslandB<- c("GID 2", "GID 4", "GID 7")
> res<-t(sapply(c("IslandA","IslandB"),function(x) {x1<-
> mat1[match(gsub(".*\\s+","",get(x)),row.names(mat1)),];(!!colSums(x1))*1}))
> res
>  #       D0989 D9820 D5629 D4327 D2134
> #IslandA     1     1     0     1     0
> #IslandB     0     1     1     0     1
>
>
> Regarding the use of "!!colSums()"
> You can check these:
>
>  t(sapply(c("IslandA","IslandB"),function(x) {x1<-
> mat1[match(gsub(".*\\s+","",get(x)),row.names(mat1)),];!colSums(x1)}))
> #        D0989 D9820 D5629 D4327 D2134
> #IslandA FALSE FALSE  TRUE FALSE  TRUE
> #IslandB  TRUE FALSE FALSE  TRUE FALSE
>
> t(sapply(c("IslandA","IslandB"),function(x) {x1<-
> mat1[match(gsub(".*\\s+","",get(x)),row.names(mat1)),];!!colSums(x1)}))
> #        D0989 D9820 D5629 D4327 D2134
> #IslandA  TRUE  TRUE FALSE  TRUE FALSE
> #IslandB FALSE  TRUE  TRUE FALSE  TRUE
>
> # "*1" will replace TRUE with 1 and FALSE with 0.
>
> A.K.
>
>
>
>
>
>
> ________________________________
> From: Elaine Kuo <elaine.kuo...@gmail.com>
> To: arun <smartpink...@yahoo.com>
> Sent: Wednesday, July 31, 2013 6:58 PM
> Subject: Re: [R] merge matrix row data
>
>
>
> Dear Arun,
>
> Thank you for the clear explanation.
> The row.names question is a mistyping, for I do not have enough sleep last
> night.
>
> Two more questions
>
> 1. If the row names are 1, 2, and 4 etc (numbers) instead of GID 1, GID 2,
> and GID 3,
>    is there any modification in need for the code ?
>
> 2. Please kindly explain the code
>     (!!colSums(x1))*1}
>
>    It is the critical part to merge the row data.
>
> Thanks again.
>
> Elaine
>
>
>
> On Thu, Aug 1, 2013 at 6:45 AM, arun <smartpink...@yahoo.com> wrote:
>
> Dear Elaine,
> >
> >I used that line only because you didn't provide the data using dput().
> So, I need to either use delimiter  "," or just leave a "space" by first
> joining the "GID" and the "numbers" using "_".  I chose the latter as I
> didn't had that much time to spent by putting "," between each entries.
> After that, I removed "_" using the ?gsub().  As Bert pointed out, there
> are many online resources for understanding regular expression.
> >
> >In this particular case, what I did was to single out the "_" in the
> first pair of quotes, and replace with  space in the second pair of quotes
> " ".  Therefore, "GID_1", would become "GID 1", which is what your original
> dataset looks like.
> >
> >If you type row.names(mat1) on the R console and enter, you will be able
> to get the output.
> >
> >Hope it helps.
> >Arun
> >
> >
> >
> >
> >
> >
> >
> >
> >________________________________
> >From: Elaine Kuo <elaine.kuo...@gmail.com>
> >To: arun <smartpink...@yahoo.com>
> >Cc: R help <r-help@r-project.org>
> >Sent: Wednesday, July 31, 2013 5:07 PM
> >Subject: Re: [R] merge matrix row data
> >
> >
> >
> >
> >Dear Arun
> >
> >Thank you for the very useful help.
> >However, please kindly explain the code below.
> >row.names(mat1)<- gsub("[_]"," ",row.names(mat1))
> >
> >
> >1. what does "[_]" mean?
> >2. what does " "  mean?
> >3. what does row.names(mat1) mean?
> >
> >I checked ?gsub but still did not get the idea.
> >
> >Thank you again
> >
> >Elaine
> >
> >
> >
> >On Wed, Jul 31, 2013 at 9:35 PM, arun <smartpink...@yahoo.com> wrote:
> >
> >HI,
> >>
> >>Please use ?dput()
> >>mat1<- as.matrix(read.table(text="
> >>
> >>D0989  D9820  D5629  D4327  D2134
> >>GID_1    1        0        0      1      0
> >>GID_2    0        1        1      0      0
> >>GID_4    0        0        1      0      0
> >>GID_5    1        1        0      0      0
> >>GID_7    0        1        0      0      1
> >>",sep="",header=TRUE))
> >>row.names(mat1)<- gsub("[_]"," ",row.names(mat1))
> >>IslandA<-c("GID 1", "GID 5")
> >>IslandB<- c("GID 2", "GID 4", "GID 7")
> >> res<-  t(sapply(c("IslandA","IslandB"),function(x)
> {x1<-mat1[match(get(x),row.names(mat1)),];(!!colSums(x1))*1} ))
> >>
> >> res
> >>#        D0989 D9820 D5629 D4327 D2134
> >>#IslandA     1     1     0     1     0
> >>#IslandB     0     1     1     0     1
> >>A.K.
> >>
> >>
> >>
> >>
> >>
> >>----- Original Message -----
> >>From: Elaine Kuo <elaine.kuo...@gmail.com>
> >>To: "r-h...@stat.math.ethz.ch" <r-h...@stat.math.ethz.ch>
> >>Cc:
> >>Sent: Wednesday, July 31, 2013 9:03 AM
> >>Subject: [R] merge matrix row data
> >>
> >>Dear list,
> >>
> >>
> >>
> >>I have a matrix showing the species presence-absence on a map.
> >>
> >>Its rows are map locations, represented by GridCellID, such as GID1 and
> GID
> >>5.
> >>
> >>Its columns are species ID, such as D0989, D9820, and D5629.
> >>
> >>The matrix is as followed.
> >>
> >>
> >>
> >>Now I want to merge the GridCellID according to the map location of each
> >>island.
> >>
> >>For instance, Island A consist of GID 1 and 5. Island B consist of GID 2,
> >>4, and 7.
> >>
> >>In GID 1 and 5, species D0989 are both 1.
> >>
> >>Then I want to merge GID 1 and 5 into Island A, with species D0989 as 1.
> >>
> >>The original matrix and the resulting matrix are listed below.
> >>
> >>Please kindly advise how to code the calculation in R.
> >>
> >>Please do not hesitate to ask if anything is unclear.
> >>
> >>Thank you in advance.
> >>
> >>
> >>
> >>Elaine
> >>
> >>
> >>
> >>Original matrix
> >>
> >>        D0989   D9820  D5629  D4327  D2134
> >>
> >>GID 1    1        0        0       1      0
> >>
> >>GID 2    0        1        1       0      0
> >>
> >>GID 4    0        0        1       0      0
> >>
> >>GID 5    1        1        0       0      0
> >>
> >>GID 7    0        1        0       0      1
> >>
> >>
> >>
> >>Resulting matrix
> >>
> >>                D0989   D9820  D5629  D4327  D2134
> >>
> >>Island A   1        1       0       1       0
> >>
> >>Island B   0        1       1       0       1
> >>
> >>    [[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.
> >>
> >>
> >
>

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