Your "solution"  is unnecessarily complicated.  There is no need to convert
to data frames and no need to eval labels -- simple indexing by column and
row names will do. I think the following code is pretty self-explanatory:

(Starting with the same mat1 and mat2)

rnames <- setdiff(rownames(mat2),rownames(mat1))
mat3 <- matrix(0,nr=length(rnames),nc=ncol(mat1)) ## correct size, all 0's
dimnames(mat3)<- list(rnames,colnames(mat1)) ## row and column names as
requested
wh <- intersect(colnames(mat1),colnames(mat2))
mat3[,wh] <- mat2[rnames,wh]

> mat3
Pollinator 1 Pollinator 2 Pollinator 3
Plant 4            1            0            0
Plant 5            0            1            0


Cheers,
Bert

        Pollinator 1 Pollinator 2 Pollinator 3
Plant 4            1            0            0
Plant 5            0            1            0





On Wed, Sep 11, 2013 at 7:10 PM, arun <smartpink...@yahoo.com> wrote:

> Hi,
>
> May be this helps:
> mat1<-
> matrix(c(1,1,0,0,0,1,0,1,0),ncol=3,dimnames=list(paste("Plant",1:3),
> paste("Pollinator",1:3)),byrow=TRUE)
>  mat2<-
> matrix(c(1,1,0,1,0,1,0,1,0),ncol=3,dimnames=list(paste("Plant",c(1,4,5)),
> paste("Pollinator",c(1,2,4))),byrow=TRUE)
> dat1<- as.data.frame(mat1)
>  dat2<- as.data.frame(mat2)
> toadddat1<-setdiff(colnames(dat2),colnames(dat1))
> toadddat2<-setdiff(colnames(dat1),colnames(dat2))
> dat2[,evalq(toadddat2)]<-0
> res<- as.matrix(dat2[!row.names(dat1)%in%
> row.names(dat2),!colnames(dat2)%in%evalq(toadddat1)] )
> res
> #        Pollinator 1 Pollinator 2 Pollinator 3
> #Plant 4            1            0            0
> #Plant 5            0            1            0
> A.K.
>
>
>
>
>
> Hello all
> I have been trying to find a solution for this for a while, and I hope you
> can help me.
> I have two matrices. Both are interaction matrices between plants
> and pollinators, and have plants as rows and pollinators as columns. The
>  matrix is a presence/absence matrix with 1´s for interaction and 0´s
> for no interaction. Here are simplified examples:
>
> Matrix 1:
>              Pollinator 1     Pollinator 2     Pollinator 3
> Plant 1          1                   1                  0
> Plant 2          0                   0                  1
> Plant 3          0                   1                  0
>
> Matrix 2:
>              Pollinator 1     Pollinator 2     Pollinator 4
> Plant 1          1                   1                  0
> Plant 4          1                   0                  1
> Plant 5          0                   1                  0
>
> What I need is to make a new matrix with the columns
> (pollinators) from matrix 1 and the rows (plants) and entries from
> matrix 2, but only with those rows that are not in matrix 1. Like this:
>
>             Pollinator 1     Pollinator 2     Pollinator 3
> Plant 4          1                   0                  0
> Plant 5          0                   1                  0
>
> Hope you can help. Thanks a lot in advance.
> Daniel
>
> ______________________________________________
> 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.
>



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm

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