An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121205/442562c1/attachment.pl>
data manipulation between vector and matrix
8 messages · C W, Sarah Goslee, arun
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121205/6549e629/attachment.pl>
Hi,
On Wed, Dec 5, 2012 at 1:30 PM, C W <tmrsg11 at gmail.com> wrote:
Dear list, I was curious how to subtract a vector from matrix? Say, I have mat <- matrix(1:40, nrow=20, ncol=2) x <-c(1,2)
Thanks for the actual reproducible example.
I want, x-mat[1,] and x-mat[2,], and so on... Basically, subtract column elements of x against column elements in mat. But x-mat won't do it.
This will (note the modification to get x - mat):
sweep(-mat, 2, x, "+")
[,1] [,2] [1,] 0 -19 [2,] -1 -20 [3,] -2 -21 [4,] -3 -22 [5,] -4 -23 etc. -- Sarah Goslee http://www.functionaldiversity.org
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121205/a83b8818/attachment.pl>
HI, In addition to ?sweep(), you can use apply(-mat,1,`+`,x) #or library(plyr) aaply(-mat,1,"+",x) A.K. ----- Original Message ----- From: C W <tmrsg11 at gmail.com> To: Sarah Goslee <sarah.goslee at gmail.com> Cc: r-help <r-help at r-project.org> Sent: Wednesday, December 5, 2012 1:51 PM Subject: Re: [R] data manipulation between vector and matrix Thanks, Sarah.? First time heard about sweep(), it worked just the way I wanted. Mike
On Wed, Dec 5, 2012 at 1:42 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:
Hi, On Wed, Dec 5, 2012 at 1:30 PM, C W <tmrsg11 at gmail.com> wrote:
Dear list, I was curious how to subtract a vector from matrix? Say, I have mat <- matrix(1:40, nrow=20, ncol=2) x <-c(1,2)
Thanks for the actual reproducible example.
I want, x-mat[1,] and x-mat[2,], and so on... Basically, subtract column elements of x against column elements in mat. But x-mat won't do it.
This will (note the modification to get x - mat):
sweep(-mat, 2, x, "+")
? ? ? [,1] [,2] ? [1,]? ? 0? -19 ? [2,]? -1? -20 ? [3,]? -2? -21 ? [4,]? -3? -22 ? [5,]? -4? -23 etc. -- Sarah Goslee http://www.functionaldiversity.org
??? [[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.
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121205/151bfb80/attachment.pl>
Hi, By comparing the different methods: set.seed(5) ?mat1<-matrix(sample(1:1e6,1e6,replace=TRUE),ncol=10000) ?set.seed(25) ?x<-sample(1:1e6,10000,replace=TRUE) ?system.time(z1<-sweep(-mat1,2,x,"+")) #?? user? system elapsed ?# 0.076?? 0.000?? 0.069 ?system.time(z2<-apply(-mat1,1,`+`,x)) ?#? user? system elapsed ?# 0.036?? 0.000?? 0.031 ?system.time(z3<-aaply(-mat1,1,`+`,x)) #?? user? system elapsed #? 1.880?? 0.000?? 1.704 ?system.time(z4<- x-t(mat1))? #winner #?? user? system elapsed ?# 0.004?? 0.000?? 0.007 ?system.time(z5<- t(x-t(mat1))) #?? user? system elapsed #? 0.008?? 0.000?? 0.009 A.K.
From: C W <tmrsg11 at gmail.com>
To: arun <smartpink111 at yahoo.com>
Cc: R help <r-help at r-project.org>; Sarah Goslee <sarah.goslee at gmail.com>
Sent: Wednesday, December 5, 2012 4:11 PM
Subject: Re: [R] data manipulation between vector and matrix
To: arun <smartpink111 at yahoo.com>
Cc: R help <r-help at r-project.org>; Sarah Goslee <sarah.goslee at gmail.com>
Sent: Wednesday, December 5, 2012 4:11 PM
Subject: Re: [R] data manipulation between vector and matrix
thanks, I knew about apply, but did not you you can put plus signs with quotes. ?That's a cool tricky, Mike On Wed, Dec 5, 2012 at 4:05 PM, arun <smartpink111 at yahoo.com> wrote: HI, >In addition to ?sweep(), you can use > >apply(-mat,1,`+`,x) > >#or >library(plyr) >aaply(-mat,1,"+",x) > > >A.K. > > > > > > > >----- Original Message ----- >From: C W <tmrsg11 at gmail.com> >To: Sarah Goslee <sarah.goslee at gmail.com> >Cc: r-help <r-help at r-project.org> >Sent: Wednesday, December 5, 2012 1:51 PM >Subject: Re: [R] data manipulation between vector and matrix > >Thanks, Sarah.? First time heard about sweep(), it worked just the way I >wanted. >Mike > >On Wed, Dec 5, 2012 at 1:42 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote: > >> Hi, >> >> On Wed, Dec 5, 2012 at 1:30 PM, C W <tmrsg11 at gmail.com> wrote: >> > Dear list, >> > I was curious how to subtract a vector from matrix? >> > >> > Say, I have >> > >> > mat <- matrix(1:40, nrow=20, ncol=2) >> > >> > x <-c(1,2) >> >> Thanks for the actual reproducible example. >> >> > I want, >> > >> > x-mat[1,] and x-mat[2,], and so on... Basically, subtract column elements >> > of x against column elements in mat. >> > >> > But x-mat won't do it. >> >> This will (note the modification to get x - mat): >> > sweep(-mat, 2, x, "+") >>? ? ? ?[,1] [,2] >>? [1,]? ? 0? -19 >>? [2,]? ?-1? -20 >>? [3,]? ?-2? -21 >>? [4,]? ?-3? -22 >>? [5,]? ?-4? -23 >> etc. >> >> -- >> Sarah Goslee >> http://www.functionaldiversity.org >> > >??? [[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. > >
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121205/fb24ce20/attachment.pl>