Christofer Bogaso
2019-Aug-18 18:01 UTC
[R] Partition a vector into select groups with fixed length
Hi, Let say I have a vector as below Vec = LETTERS Now I want to break this vector into groups of the same length of 5. So, 1st group consists - "A" "B" "C" "D" "E" 2nd group - "F" "G" "H" "I" "J" and so on.. last group will consist only the leftover elements I have a very large initial vector, so looking for some efficient way to achieve the same. Any pointer will be highly appreciated. Thanks for your time.
Rui Barradas
2019-Aug-18 18:37 UTC
[R] Partition a vector into select groups with fixed length
Hello, The following function will do it. It uses a standard cumsum trick to create a break vector f. And predicts special cases (n = 0 or n = 1). breakVec <- function(x, n = 5){ if(n < 1) stop(paste("Illegal value n:", n)) if(n == 1){ f = "" }else{ f <- c(1, rep(0, n - 1)) f <- rep(f, length.out = length(x)) f <- cumsum(f) } split(x, f) } breakVec(LETTERS) breakVec(LETTERS, 4) breakVec(LETTERS, 1) breakVec(LETTERS, -1) Hope this helps, Rui Barradas ?s 19:01 de 18/08/19, Christofer Bogaso escreveu:> Hi, > > Let say I have a vector as below > > Vec = LETTERS > > Now I want to break this vector into groups of the same length of 5. > > So, > 1st group consists - "A" "B" "C" "D" "E" > 2nd group - "F" "G" "H" "I" "J" > > and so on.. > last group will consist only the leftover elements > > I have a very large initial vector, so looking for some efficient way > to achieve the same. Any pointer will be highly appreciated. > > Thanks for your time. > > ______________________________________________ > 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. >
Gerrit Eichner
2019-Aug-18 18:41 UTC
[R] Partition a vector into select groups with fixed length
Hi, Christofer, try something along len <- 5 split(Vec, rep(seq(ceiling(length(Vec)/len)), each = len)) Hth -- Gerrit --------------------------------------------------------------------- Dr. Gerrit Eichner Mathematical Institute, Room 212 gerrit.eichner at math.uni-giessen.de Justus-Liebig-University Giessen Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany Fax: +49-(0)641-99-32109 http://www.uni-giessen.de/eichner --------------------------------------------------------------------- Am 18.08.2019 um 20:01 schrieb Christofer Bogaso:> Hi, > > Let say I have a vector as below > > Vec = LETTERS > > Now I want to break this vector into groups of the same length of 5. > > So, > 1st group consists - "A" "B" "C" "D" "E" > 2nd group - "F" "G" "H" "I" "J" > > and so on.. > last group will consist only the leftover elements > > I have a very large initial vector, so looking for some efficient way > to achieve the same. Any pointer will be highly appreciated. > > Thanks for your time. > > ______________________________________________ > 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. >
Bert Gunter
2019-Aug-18 19:08 UTC
[R] Partition a vector into select groups with fixed length
Perhaps simpler: Hint: (seq_along(LETTERS) -1) %/% 5 ## modular arithmetic can be useful for this sort of thing Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Sun, Aug 18, 2019 at 11:47 AM Gerrit Eichner < gerrit.eichner at math.uni-giessen.de> wrote:> Hi, Christofer, > > try something along > > len <- 5 > split(Vec, rep(seq(ceiling(length(Vec)/len)), each = len)) > > Hth -- Gerrit > > --------------------------------------------------------------------- > Dr. Gerrit Eichner Mathematical Institute, Room 212 > gerrit.eichner at math.uni-giessen.de Justus-Liebig-University Giessen > Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany > Fax: +49-(0)641-99-32109 http://www.uni-giessen.de/eichner > --------------------------------------------------------------------- > > Am 18.08.2019 um 20:01 schrieb Christofer Bogaso: > > Hi, > > > > Let say I have a vector as below > > > > Vec = LETTERS > > > > Now I want to break this vector into groups of the same length of 5. > > > > So, > > 1st group consists - "A" "B" "C" "D" "E" > > 2nd group - "F" "G" "H" "I" "J" > > > > and so on.. > > last group will consist only the leftover elements > > > > I have a very large initial vector, so looking for some efficient way > > to achieve the same. Any pointer will be highly appreciated. > > > > Thanks for your time. > > > > ______________________________________________ > > 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. > > > > ______________________________________________ > 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. >[[alternative HTML version deleted]]