Viechtbauer, Wolfgang (SP)
2018-Jul-03 13:28 UTC
[R] Combine by columns a vector with another vector that is constant across rows
Hi All, I have one vector that I want to combine with another vector and that other vector should be the same for every row in the combined matrix. This obviously does not work: vec <- c(2,4,3) cbind(1:5, vec) This does, but requires me to specify the correct value for 'n' in replicate(): cbind(1:5, t(replicate(5, vec))) Other ways that do not require this are: t(sapply(1:5, function(x) c(x, vec))) do.call(rbind, lapply(1:5, function(x) c(x, vec))) t(mapply(c, 1:5, MoreArgs=list(vec))) I wonder if there is a simpler / more efficient way of doing this. Best, Wolfgang
PIKAL Petr
2018-Jul-03 14:39 UTC
[R] Combine by columns a vector with another vector that is constant across rows
Hi If you put 1:5 vector to x you could do cbind(x,t(replicate(length(x), vec))) Cheers Petr Osobn? ?daje: Informace o zpracov?n? a ochran? osobn?ch ?daj? obchodn?ch partner? PRECHEZA a.s. jsou zve?ejn?ny na: https://www.precheza.cz/zasady-ochrany-osobnich-udaju/ | Information about processing and protection of business partner's personal data are available on website: https://www.precheza.cz/en/personal-data-protection-principles/ D?v?rnost: Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a podl?haj? tomuto pr?vn? z?vazn?mu prohl??en? o vylou?en? odpov?dnosti: https://www.precheza.cz/01-dovetek/ | This email and any documents attached to it may be confidential and are subject to the legally binding disclaimer: https://www.precheza.cz/en/01-disclaimer/> -----Original Message----- > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Viechtbauer, > Wolfgang (SP) > Sent: Tuesday, July 3, 2018 3:29 PM > To: r-help at r-project.org > Subject: [R] Combine by columns a vector with another vector that is constant > across rows > > Hi All, > > I have one vector that I want to combine with another vector and that other > vector should be the same for every row in the combined matrix. This obviously > does not work: > > vec <- c(2,4,3) > cbind(1:5, vec) > > This does, but requires me to specify the correct value for 'n' in replicate(): > > cbind(1:5, t(replicate(5, vec))) > > Other ways that do not require this are: > > t(sapply(1:5, function(x) c(x, vec))) > do.call(rbind, lapply(1:5, function(x) c(x, vec))) t(mapply(c, 1:5, > MoreArgs=list(vec))) > > I wonder if there is a simpler / more efficient way of doing this. > > Best, > Wolfgang > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.
Gabor Grothendieck
2018-Jul-03 14:46 UTC
[R] Combine by columns a vector with another vector that is constant across rows
Try Reduce: Reduce(cbind, vec, 1:5) On Tue, Jul 3, 2018 at 9:28 AM, Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote:> Hi All, > > I have one vector that I want to combine with another vector and that other vector should be the same for every row in the combined matrix. This obviously does not work: > > vec <- c(2,4,3) > cbind(1:5, vec) > > This does, but requires me to specify the correct value for 'n' in replicate(): > > cbind(1:5, t(replicate(5, vec))) > > Other ways that do not require this are: > > t(sapply(1:5, function(x) c(x, vec))) > do.call(rbind, lapply(1:5, function(x) c(x, vec))) > t(mapply(c, 1:5, MoreArgs=list(vec))) > > I wonder if there is a simpler / more efficient way of doing this. > > Best, > Wolfgang > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.-- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
Jeff Newmiller
2018-Jul-03 15:21 UTC
[R] Combine by columns a vector with another vector that is constant across rows
Gabor's solution seems to optimize 'simpler'. More efficient is to learn that in R a vector is not a matrix, but a matrix is just an ornamented vector. fastWolfgang <- function( v, vec ) { matrix( c( v, rep( vec, length( v ) ) ) , now = length( v ) ) } On July 3, 2018 6:28:45 AM PDT, "Viechtbauer, Wolfgang (SP)" <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote:>Hi All, > >I have one vector that I want to combine with another vector and that >other vector should be the same for every row in the combined matrix. >This obviously does not work: > >vec <- c(2,4,3) >cbind(1:5, vec) > >This does, but requires me to specify the correct value for 'n' in >replicate(): > >cbind(1:5, t(replicate(5, vec))) > >Other ways that do not require this are: > >t(sapply(1:5, function(x) c(x, vec))) >do.call(rbind, lapply(1:5, function(x) c(x, vec))) >t(mapply(c, 1:5, MoreArgs=list(vec))) > >I wonder if there is a simpler / more efficient way of doing this. > >Best, >Wolfgang > >______________________________________________ >R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >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.-- Sent from my phone. Please excuse my brevity.
Gabor Grothendieck
2018-Jul-03 15:32 UTC
[R] Combine by columns a vector with another vector that is constant across rows
or this variation if you don't want the first column to be named init: Reduce(cbind2, vec, 1:5) On Tue, Jul 3, 2018 at 10:46 AM, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:> Try Reduce: > > Reduce(cbind, vec, 1:5) > > On Tue, Jul 3, 2018 at 9:28 AM, Viechtbauer, Wolfgang (SP) > <wolfgang.viechtbauer at maastrichtuniversity.nl> wrote: >> Hi All, >> >> I have one vector that I want to combine with another vector and that other vector should be the same for every row in the combined matrix. This obviously does not work: >> >> vec <- c(2,4,3) >> cbind(1:5, vec) >> >> This does, but requires me to specify the correct value for 'n' in replicate(): >> >> cbind(1:5, t(replicate(5, vec))) >> >> Other ways that do not require this are: >> >> t(sapply(1:5, function(x) c(x, vec))) >> do.call(rbind, lapply(1:5, function(x) c(x, vec))) >> t(mapply(c, 1:5, MoreArgs=list(vec))) >> >> I wonder if there is a simpler / more efficient way of doing this. >> >> Best, >> Wolfgang >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. > > > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com-- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com
Jeff Newmiller
2018-Jul-03 15:47 UTC
[R] Combine by columns a vector with another vector that is constant across rows
Sorry trying again... fastWolfgang <- function( v, vec ) { matrix( c( v, rep( vec, each = length( v ) ) ) , nrow = length( v ) ) } On July 3, 2018 8:21:47 AM PDT, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:>Gabor's solution seems to optimize 'simpler'. > >More efficient is to learn that in R a vector is not a matrix, but a >matrix is just an ornamented vector. > >fastWolfgang <- function( v, vec ) { > matrix( c( v, rep( vec, length( v ) ) ) > , now = length( v ) ) >} > >On July 3, 2018 6:28:45 AM PDT, "Viechtbauer, Wolfgang (SP)" ><wolfgang.viechtbauer at maastrichtuniversity.nl> wrote: >>Hi All, >> >>I have one vector that I want to combine with another vector and that >>other vector should be the same for every row in the combined matrix. >>This obviously does not work: >> >>vec <- c(2,4,3) >>cbind(1:5, vec) >> >>This does, but requires me to specify the correct value for 'n' in >>replicate(): >> >>cbind(1:5, t(replicate(5, vec))) >> >>Other ways that do not require this are: >> >>t(sapply(1:5, function(x) c(x, vec))) >>do.call(rbind, lapply(1:5, function(x) c(x, vec))) >>t(mapply(c, 1:5, MoreArgs=list(vec))) >> >>I wonder if there is a simpler / more efficient way of doing this. >> >>Best, >>Wolfgang >> >>______________________________________________ >>R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >>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.-- Sent from my phone. Please excuse my brevity.