Hello arun

I modified your code a little bit but failed to retrieve the row.names.

The response is NULL.

Please kindly help and thanks.

Elaine


Code

load("h:/b_W_line/R_workspace/dataset_Residence_2748.RData")

  dim(dataR)

  str(dataR)

  dataR.m<- as.matrix(dataR, header=TRUE)

  dataR.m[,1]

  row.names(dataR.m)


dput(dataR.m)

.skipped...0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,

0L, 0L, 0L, 0L, 0L), .Dim = c(4873L, 14L), .Dimnames = list(NULL,

    c("GID", "D0407", "D0409", "D0410", "D0462", "D0463", "D0473",

    "D0475", "D0488", "D0489", "D0492", "D0493", "D0504", "D0536"

    )))


On Thu, Aug 1, 2013 at 1:24 PM, Elaine Kuo <elaine.kuo...@gmail.com> wrote:

> Hello Arun
>
> Thank for comments.
>
> You are right. GID is the first column in the matrix this time.
>
> In the second row of the first column, it used to be GID 1 in the first
> e-mail.
> But you are also right. You answered it already, and  this time In the
> second row of the first column is 1.
> Below is part of dput()(too many columns)
>
> ...... .Names = c("GID",
> "D5291", "D5293", "D7414", "D7415", "D7416", "D7417", "D7418",
> "D7419", "D7420", "D7421", "D7422", "D7423", "D7424", "D7425",
> "D7426", "D7427", "D7428", "D7429", "D7430", "D7431", "D7432",
> "D7433", "D7434", "D7435", "D7436", "D7437", "D7438", "D7439",
> "D7440", "D7441", "D7442", "D7443", "D7444", "D7445", "D7446",
> "
> Elaine
>
>
> On Thu, Aug 1, 2013 at 12:35 PM, arun <smartpink...@yahoo.com> wrote:
>
>>
>>
>> Hi Elaine,
>> I am not sure how your "original matrix" keeps on changing from the
>> original post.  Here, your statement about rownames are 1, 2, 4 (the answer
>> I already provided in the last post) and the matrix you showed looks
>> different.  It seems like GID is the first column in the matrix.  I
>> requested you to dput() the data to reduce these confusions.
>>
>> mat1<-as.matrix(read.table(text="
>> 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
>> ",sep="",header=TRUE))
>> IslandA<-c("GID 1", "GID 5")
>> IslandB<- c("GID 2", "GID 4", "GID
>> 7")t(sapply(c("IslandA","IslandB"),function(x) {x1<-
>> mat1[match(gsub(".*\\s+","",get(x)),mat1[,1]),-1];(!!colSums(x1))*1}))
>> #        D0989 D9820 D5629 D4327 D2134
>> #IslandA     1     1     0     1     0
>> #IslandB     0     1     1     0     1
>> A.K.
>>
>>
>>
>>
>>
>> ________________________________
>> From: Elaine Kuo <elaine.kuo...@gmail.com>
>> To: arun <smartpink...@yahoo.com>
>> Cc: R help <r-help@r-project.org>
>> Sent: Thursday, August 1, 2013 12:00 AM
>> Subject: Re: [R] merge matrix row data
>>
>>
>>
>> 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