HI Elaine,
>From the error, it looks like there are cases where none of the elements in 
>one of the element matches to the GID column of dataNP.m.
It's only a guess as you didn't provide  information about the "Islands".

I was able to recreate the error you got.
dataNP.m<-structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 
13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L), .Dim = c(20L, 
14L), .Dimnames = list(NULL, c("GID", "D0407", "D0409", "D0410", 
"D0462", "D0463", "D0473", "D0475", "D0488", "D0489", "D0492", 
"D0493", "D0504", "D0536")))

Conti_Australia<- c(1,14,18)
Conti_Malay<- c(2,6,8)
Island_Sumatra<- c(3,9,21)
Island_New_Guinea<- c(22,24,28) #none of the elements are present in the GID 
column of example dataset
lapply(c("Conti_Australia","Conti_Malay","Island_Sumatra","Island_New_Guinea"),function(x)
 {x1<- match(get(x),dataNP.m[,1]); x2<-x1[!is.na(x1)];colSums(x2)})
#Error in colSums(x2) : 'x' must be an array of at least two dimensions


lst1<-sapply(c("Conti_Australia","Conti_Malay","Island_Sumatra","Island_New_Guinea"),function(x)
 {x1<- match(get(x),dataNP.m[,1]); x2<-x1[!is.na(x1)];if(length(x2)>0) 
(!!colSums(dataNP.m[x2,-1]))*1})

t(simplify2array(lst1[lapply(lst1,length)>0]))
#                D0407 D0409 D0410 D0462 D0463 D0473 D0475 D0488 D0489 D0492
#Conti_Australia     0     0     0     0     0     1     0     0     0     0
#Conti_Malay         0     0     0     0     0     1     0     0     0     0
#Island_Sumatra      0     0     0     0     0     0     0     0     0     1
#                D0493 D0504 D0536
#Conti_Australia     0     0     1
#Conti_Malay         1     0     1
#Island_Sumatra      0     0     0

A.K.





________________________________
From: Elaine Kuo <elaine.kuo...@gmail.com>
To: arun <smartpink...@yahoo.com> 
Sent: Thursday, August 1, 2013 9:20 AM
Subject: Re: [R] merge matrix row data



Hello arun, 

It is Elaine again.

After running the function in the last sentence of your code, 
an error message says
Error in colSums(x1) : 'x' must be an array of at least two dimensions


Please kindly help and thanks

Elaine

dput

> dput(head(dataNP.m,20))
structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 
13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L), .Dim = c(20L, 
14L), .Dimnames = list(NULL, c("GID", "D0407", "D0409", "D0410", 
"D0462", "D0463", "D0473", "D0475", "D0488", "D0489", "D0492", 
"D0493", "D0504", "D0536")))

Code

 island<- t(sapply(c( "Conti_Australia","Conti_Korea","Conti_Malay",
+                    "Island_Sumatra","Island_Bali","Island_Lombok",
+                    
"Island_Lesser_Sunda","Island_Maluku","Island_Sulawesi","Island_Kepu_Sula",
+                    "Island_New_Guinea","Island_Palawan","Island_Phillipines",
+                    "Island_Hainan","Island_Taiwan",
+                    
"Island_Sakishima","Island_Ryukyu","Island_Amami","Island_Osumi",
+                    
"Island_Kyushu","Island_Shikoku","Island_Honshu","Island_Hokkaido","Island_Sakhalin"),
+  function(x) {x1<- 
dataNP.m[match(get(x),dataNP.m[,1]),-1];(!!colSums(x1))*1})) 




On Thu, Aug 1, 2013 at 8:41 PM, arun <smartpink...@yahoo.com> wrote:

Hi Elaine,
>No problem.
>Regards,
>
>Arun
>
>
>
>
>
>________________________________
>From: Elaine Kuo <elaine.kuo...@gmail.com>
>To: arun <smartpink...@yahoo.com>
>Sent: Thursday, August 1, 2013 8:40 AM
>
>Subject: Re: [R] merge matrix row data
>
>
>
>Yes, you are right. Now it is time to compare GID value and islands.
>It worked well. :P
>Thanks Arun very much.
>You made my work finish much earlier than I expected
>
>Have a nice day
>
>Elaine
>
>
>
>On Thu, Aug 1, 2013 at 8:34 PM, arun <smartpink...@yahoo.com> wrote:
>
>Currently, I am really confused as to how your data looks like.
>>You showed me some data and I was able to process it.  Now, what is with the 
>>row.names.  We are not comparing the row.names anymore.  Isn't the comparison 
>>between the GID column and the values in Islands?
>>Also, it is difficult to pinpoint just by looking at that piece of code.  
>>There are no errors or anything.  It would be better if you tell me exactly 
>>what the problem is..
>>
>>
>>
>>
>>
>>
>>
>>________________________________
>>From: Elaine Kuo <elaine.kuo...@gmail.com>
>>To: arun <smartpink...@yahoo.com>
>>Sent: Thursday, August 1, 2013 8:30 AM
>>
>>Subject: Re: [R] merge matrix row data
>>
>>
>>
>>Hello Arun, 
>>
>>Thanks.
>>
>>However, the problem is that row.names cannot be read once it turns to be 1, 
>>2, 3 instead of GID 1, GID 2, GID 3.
>>Therefore, it is not possible to copy value from GID to islands.
>>
>>Please kindly help indicate where the error could be. (response: NULL)
>>Thanks..
>>
>>Code
>> dataNP_1 
>><-read.dbf("H:/temp_D/stage_4_R_2748_S/NP_1067/Anseriformes_13.dbf", as.is = 
>>FALSE)
>>dataNP.m<- as.matrix(dataNP_1,header=TRUE)
>>row.names(dataNP.m)
>>
>>
>>
>>
>>On Thu, Aug 1, 2013 at 8:24 PM, arun <smartpink...@yahoo.com> wrote:
>>
>>HI Elaine,
>>>
>>>So, according to your new post, it seems like:
>>>IslandA<- c("1","5")
>>>IslandB<- c("2","4","7")
>>>In that case, you don't need the gsub()
>>>
>>>
>>> t(sapply(c("IslandA","IslandB"),function(x) {x1<- 
>>>mat1[match(get(x),mat1[,1]),-1];(!!colSums(x1))*1}))
>>>#        D0407 D0409 D0410 D0462 D0463 D0473 D0475 D0488 D0489 D0492 D0493 
>>>D0504
>>>
>>>#IslandA     0     0     0     0     0     0     0     0     0     0     0   
>>>  0
>>>#IslandB     0     0     0     0     0     1     0     0     0     0     1   
>>>  0
>>>#        D0536
>>>#IslandA     0
>>>#IslandB     1
>>>
>>>
>>>Also, Inline:
>>>
>>>
>>>
>>>
>>>________________________________
>>>From: Elaine Kuo <elaine.kuo...@gmail.com>
>>>To: arun <smartpink...@yahoo.com>
>>>Sent: Thursday, August 1, 2013 8:17 AM
>>>
>>>Subject: Re: [R] merge matrix row data
>>>
>>>
>>>
>>>
>>>Let's solve the questions one  by one.
>>>
>>>1. In the second row of the first column, it used to be GID 1 in the first 
>>>e-mail. "
>>>Are you saying that first column is "GID", "GID", "GID", and 2nd column is 
>>>1, 2, 4 etc?
>>>
>>>=> No. The first column is GID, 1, 2, 3, .....But the first row of the first 
>>>column is GID (column name.)
>>>
>>>
>>>2. This dput() is also not full (so can't be used). Trying subset a smaller 
>>>dataset and dput that subset.
>>>=> No. This is a full set of data. I chose a genus with 13 species (Dxxxx).
>>>
>>>
>>>Let it be.  if the output of dput() is not complete, it can be used.  That 
>>>is the reason I asked for dput(head(dataset,20)) so that it gets the first 
>>>20 rows of data.
>>>
>>>
>>>
>>>     Please kindly forget the example in previous e-mails.
>>>
>>>3. Are they of the same format as below?
>>>
>>>
>>>
>>>IslandA<-c("GID 1", "GID 5")
>>>IslandB<- c("GID 2", "GID 4", "GID 7")
>>>
>>>=> Actually the GID range from 1 to 4873.
>>>    IslandA and IslandB are example for actual islands. 
>>>    Please forget Island A and B and let's go into the real world. 
>>>   Here are some actual islands I just finished compiling.
>>>
>>>   Island_Bali<-c("971","972") 
>>>   Island_Lombok<-c("973","946") 
>>>  Island_Kepu_Sula<-c("1163","1164") 
>>>
>>>
>>>
>>>
>>>A.K.
>>>
>>>
>>>
>>>On Thu, Aug 1, 2013 at 8:01 PM, arun <smartpink...@yahoo.com> wrote:
>>>
>>>Also, here the GID numbers are from 1 to 20.  What is the corresponding 
>>>GID's in IslandA and IslandB?  Is it the same as you posted previously?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>________________________________
>>>> From: Elaine Kuo <elaine.kuo...@gmail.com>
>>>>To: arun <smartpink...@yahoo.com>
>>>>Sent: Thursday, August 1, 2013 7:57 AM
>>>>
>>>>Subject: Re: [R] merge matrix row data
>>>>
>>>>
>>>>
>>>>Thanks.
>>>>
>>>>
>>>>Here you go.
>>>>
>>>>
>>>>structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 
>>>>13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 
>>>>1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
>>>>0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
>>>>1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L), .Dim = c(20L, 
>>>>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 7:55 PM, arun <smartpink...@yahoo.com> wrote:
>>>>
>>>>HI Elaine,
>>>>>It seems like you skippped a part of the dput() output.  Without the full, 
>>>>>it is not useful.  Try copy and paste the output you showed in your R 
>>>>>console.  I am not asking for the full data to be dput().  Just
>>>>>dput(head(dataset,20))
>>>>>
>>>>>
>>>>>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 5:25 AM
>>>>>
>>>>>Subject: Re: [R] merge matrix row data
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>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.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>      
>>>>>>>> 
>>>>>>>
>>>>>>   
>>>>>
>>>>
>>>>
>>>>
>>>
>>
>

______________________________________________
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