[R] Create a numeric series in an efficient way

@vi@e@gross m@iii@g oii gm@ii@com @vi@e@gross m@iii@g oii gm@ii@com
Fri Jun 14 04:03:46 CEST 2024


For the particular example you asked for, consider the "each" you can use
with rep()

rep(1:13, each=84)

This is what it does for a shorter version of 4 each:

> rep(1:13, each=4)
 [1]  1  1  1  1  2  2  2  2  3  3  3  3  4  4  4  4  5  5  5  5  6  6  6  6
7  7  7  7  8  8  8  8  9  9  9  9 10 10 10 10
[41] 11 11 11 11 12 12 12 12 13 13 13 13


For another variant, make 84 copies of 1:13 and sort that as you happen to
want the numbers in order.

sort(rep(1:13, each=84))

The output is the same.

If you want a much more compact solution that handles arbitrary pairs of
"what to copy", number_of_copies, you can write a function  that evaluates
two arguments at a time or takes two vectors as arguments like this one I
wrote quickly and crudely:

rep_many <- function(items, counts) {
  result <- c()
  for (index in 1:length(items)) {
    result <- c(result, rep(items[index], counts[index]))
  }
  return(result)
  }
   
rep_many(1:13, rep(84,13))


The same ideas can be used using a data.frame or functional programming
methods but the above is simple enough to flexibly create two vectors
specifying how much of each.

You said you found a solution, so you may want to share what you chose
already.




-----Original Message-----
From: R-help <r-help-bounces using r-project.org> On Behalf Of Francesca PANCOTTO
via R-help
Sent: Thursday, June 13, 2024 10:42 AM
To: r-help using r-project.org
Subject: [R] Create a numeric series in an efficient way

Dear Contributors
I am trying to create a numeric series with repeated numbers, not difficult
task, but I do not seem to find an efficient way.

This is my solution

blocB <- c(rep(x = 1, times = 84), rep(x = 2, times = 84), rep(x = 3, times
= 84), rep(x = 4, times = 84), rep(x = 5, times = 84), rep(x = 6, times =
84), rep(x = 7, times = 84), rep(x = 8, times = 84), rep(x = 9, times =
84), rep(x = 10, times = 84), rep(x = 11, times = 84), rep(x = 12, times =
84), rep(x = 13, times = 84))

which works but it is super silly and I need to create different variables
similar to this, changing the value of the repetition, 84 in this case.
Thanks for any help.


F.

	[[alternative HTML version deleted]]

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



More information about the R-help mailing list