How to do this in an elegant way formatrix/data frame/zoo? mat1 2 3 4 5 6 7 8 9 vector1 2 3 result0 1 2 2 3 4 4 5 6 ie 1-1 2-1 3-1 4-2 5-2 6-2 7-3 8-3 9-3 Thanks in advance. _________________________________________________________________ 08 [[alternative HTML version deleted]]
Dimitris Rizopoulos
2008-Mar-02 17:56 UTC
[R] elegant way to minus on each row of a matrix
try this: mat <- matrix(1:9, 3, 3, TRUE) dat <- as.data.frame(mat) vec <- 1:3 result.mat <- mat - vec result.dat <- dat - vec result.mat result.dat I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm Quoting Bo Zhou <bozhou1981 at hotmail.com>:> > How to do this in an elegant way formatrix/data frame/zoo? > > mat> 1 2 3 > 4 5 6 > 7 8 9 > > vector> 1 > 2 > 3 > > > result> 0 1 2 > 2 3 4 > 4 5 6 > > ie > 1-1 2-1 3-1 > 4-2 5-2 6-2 > 7-3 8-3 9-3 > > Thanks in advance. > > _________________________________________________________________ > > > 08 > [[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. > >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
Henrique Dallazuanna
2008-Mar-02 17:56 UTC
[R] elegant way to minus on each row of a matrix
Try this: sweep(mat, 1, vec) On 02/03/2008, Bo Zhou <bozhou1981 at hotmail.com> wrote:> > How to do this in an elegant way formatrix/data frame/zoo? > > mat> 1 2 3 > 4 5 6 > 7 8 9 > > vector> 1 > 2 > 3 > > > result> 0 1 2 > 2 3 4 > 4 5 6 > > ie > 1-1 2-1 3-1 > 4-2 5-2 6-2 > 7-3 8-3 9-3 > > Thanks in advance. > > _________________________________________________________________ > > > 08 > [[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. >-- Henrique Dallazuanna Curitiba-Paran?-Brasil 25? 25' 40" S 49? 16' 22" O
Hi Mark, (CC'ing r-help) Only need to change the parameter from 1 to 2 after that it worked great. Thanks> t1=matrix(1:15,5,3)> t1[,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15> t2=1:5> t2[1] 1 2 3 4 5> apply(t1,2, function(x) x - t2)[,1] [,2] [,3] [1,] 0 5 10 [2,] 0 5 10 [3,] 0 5 10 [4,] 0 5 10 [5,] 0 5 10>> Date: Sun, 2 Mar 2008 12:51:53 -0500 > From: markleeds@verizon.net > Subject: RE: [R] elegant way to minus on each row of a matrix > To: bozhou1981@hotmail.com > > try result<-apply(mat,1, function(.row) .row - vector) but I don't have R > here so make sure it works. > > -----Original Message----- > From: r-help-bounces@r-project.org [mailto:r-help-bounces@r-project.org] On > Behalf Of Bo Zhou > Sent: Sunday, March 02, 2008 12:43 PM > To: r-help@r-project.org > Subject: [R] elegant way to minus on each row of a matrix > > > How to do this in an elegant way formatrix/data frame/zoo? > > mat> 1 2 3 > 4 5 6 > 7 8 9 > > vector> 1 > 2 > 3 > > > result> 0 1 2 > 2 3 4 > 4 5 6 > > ie > 1-1 2-1 3-1 > 4-2 5-2 6-2 > 7-3 8-3 9-3 > > Thanks in advance. > > _________________________________________________________________ > > > 08 > [[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. >_________________________________________________________________ 08 [[alternative HTML version deleted]]