Home > OS >  R - create vector with sequence c(1,4,5,8,9,12,13,16),etc
R - create vector with sequence c(1,4,5,8,9,12,13,16),etc

Time:10-09

We are looking to create a vector with the following sequence:

1,4,5,8,9,12,13,16,17,20,21,...

Start with 1, then skip 2 numbers, then add 2 numbers, then skip 2 numbers, etc., not going above 2000. We also need the inverse sequence 2,3,6,7,10,11,...

CodePudding user response:

We may use recyling vector to filter the sequence

(1:21)[c(TRUE, FALSE, FALSE, TRUE)]
 [1]  1  4  5  8  9 12 13 16 17 20 21

CodePudding user response:

alternatively, here using rep and cumsum

cumsum(rep(c(1,3), 500))

and

cumsum(rep(c(3,1), 500)) - 1

CodePudding user response:

Got this one myself - head(sort(c(seq(1, 2000, 4), seq(4, 2000, 4))), 20)

CodePudding user response:

We can try like below

> (v <- seq(21))[v %% 4 %in% c(0, 1)]
 [1]  1  4  5  8  9 12 13 16 17 20 21

CodePudding user response:

A tidyverse option.

library(purrr)
library(dplyr)

map_int(1:11, ~ case_when(. == 1 ~ as.integer(1),
                          . %% 2 == 0 ~ as.integer(.*2),
                          T ~ as.integer((.*2)-1)))

#  [1]  1  4  5  8  9 12 13 16 17 20 21
  • Related