[R] Replacing values of a matrix with values from corresponding rows of another matrix

David Carlson dcarlson at tamu.edu
Mon Jul 15 17:19:42 CEST 2013


This should also work:

> mask <- randomized > 0
> mask
      [,1]  [,2]  [,3]  [,4]  [,5] [,6]
[1,] FALSE FALSE  TRUE FALSE FALSE TRUE
[2,]  TRUE  TRUE FALSE  TRUE  TRUE TRUE
[3,] FALSE  TRUE  TRUE FALSE FALSE TRUE
[4,]  TRUE  TRUE FALSE  TRUE FALSE TRUE
> randomized[mask] <- original[mask]
> randomized
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    0    4    0    0    1
[2,]    2    2    0    1    0    2
[3,]    0    5    0    0    0    1
[4,]    3    1    0    5    0    4

-------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77840-4352


-----Original Message-----
From: r-help-bounces at r-project.org
[mailto:r-help-bounces at r-project.org] On Behalf Of Laura Cisneros
Sent: Monday, July 15, 2013 8:31 AM
To: Blaser Nello
Cc: r-help at r-project.org
Subject: Re: [R] Replacing values of a matrix with values from
corresponding rows of another matrix

Great! Thank you, Nello. It works on my larger matrices.


On Mon, Jul 15, 2013 at 2:40 AM, Blaser Nello
<nblaser at ispm.unibe.ch> wrote:

> For small matrix you could use a for-loop.
>
> for (i in 1:nrow(randomized)){
>   randomized[i,randomized[i,]!=0] <-
sample(original[i,original[i,]!=0])
> }
> randomized
>
> If you have a larger matrix sapply is probably faster
> randomized <- t(sapply(1:nrow(randomized), function(i) {
>   randomized[i,randomized[i,]!=0] <-
sample(original[i,original[i,]!=0])
>   randomized[i,]
> }))
> randomized
>
> Best,
> Nello
>
> -----Original Message-----
> From: r-help-bounces at r-project.org
[mailto:r-help-bounces at r-project.org]
> On Behalf Of Laura Cisneros
> Sent: Montag, 15. Juli 2013 03:09
> To: r-help at r-project.org
> Subject: [R] Replacing values of a matrix with values from
corresponding
> rows of another matrix
>
> Hello all,
>
> I have been trying to figure out how to replace non-zero values of
a
> matrix with non-zero values from corresponding rows from another
matrix.
> More specifically, let say we have the following original matrix:
>
> original <-
>
>
matrix(c(0,0,4,0,0,1,2,2,12,1,0,2,0,5,0,0,10,1,3,1,0,5,0,4),byrow=TR
UE,nrow=4,ncol=6)
> > original
>      [,1] [,2] [,3] [,4] [,5] [,6]
> [1,]    0    0    4    0    0    1
> [2,]    2    2   12    1    0    2
> [3,]    0    5    0    0   10    1
> [4,]    3    1    0    5    0    4
>
> And we randomize this matrix such that the total of occurrences of
> non-zero values in each row and column are maintained in the
randomized
> matrix:
>
> randomized <-
>
>
matrix(c(0,0,12,0,0,1,2,2,0,5,10,2,0,1,4,0,0,1,3,5,0,1,0,4),byrow=TR
UE,nrow=4,ncol=6)
> > randomized
>      [,1] [,2] [,3] [,4] [,5] [,6]
> [1,]    0    0   12    0    0    1
> [2,]    2    2    0    5   10    2
> [3,]    0    1    4    0    0    1
> [4,]    3    5    0    1    0    4
>
> What I would like to do now is replace (in a random fashion) the
non-zero
> values in each row of the randomized matrix using the non-zero
values from
> the corresponding rows in the original matrix. For example, for
row 1 I
> would like to randomly replace 12 and 1 (from the randomized
matrix) with 4
> and 1 (from the original matrix). Then do this for each row.
>
> Any suggestions on how I may be able to accomplish this would be
greatly
> appreciated.
>
> Laura
> --
> Laura Cisneros, Doctoral Candidate
> Dept. of Ecology and Evolutionary Biology University of
Connecticut
> 75 N. Eagleville Road, U-3043
> Storrs, CT 06269-3043
>
> Tel: (860) 486-1772
> Fax: (860) 486-5488
> Alternative Email: laura.cisneros at uconn.edu
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>
>
>


-- 
Laura Cisneros, Doctoral Candidate
Dept. of Ecology and Evolutionary Biology
University of Connecticut
75 N. Eagleville Road, U-3043
Storrs, CT 06269-3043

Tel: (860) 486-1772
Fax: (860) 486-5488
Alternative Email: laura.cisneros at uconn.edu

	[[alternative HTML version deleted]]

______________________________________________
R-help at 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.



More information about the R-help mailing list