Извлеките каждый n-й элемент вектора

Я хотел бы создать вектор, в котором каждый элемент является элементом i+6th другого вектора.

Например, в векторе длиной 120 я хочу создать еще один вектор длиной 20, в котором каждый элемент является значением i, i+6, i+12, i+18... исходного вектора, то есть я хочу извлечь каждый шестой элемент оригинала.

Ответ 1

a <- 1:120
b <- a[seq(1, length(a), 6)]

Ответ 2

Другим трюком для получения последовательных фрагментов (помимо уже упомянутого решения seq) является использование короткого логического вектора и использование утилизации векторов:

foo[ c( rep(FALSE, 5), TRUE ) ]

Ответ 3

Я думаю, вы задаете две вещи, которые не обязательно одинаковы.

Я хочу извлечь каждый шестой элемент из оригинал

Вы можете сделать это, указав последовательность:

foo <- 1:120
foo[1:20*6]

Я хотел бы создать вектор в каждый элемент которого равен я + 6th элемент другого вектора.

Легкий способ сделать это - дополнить логический фактор FALSE до i+6:

foo <- 1:120
i <- 1
foo[1:(i+6)==(i+6)]
[1]   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119

i <- 10
foo[1:(i+6)==(i+6)]
[1]  16  32  48  64  80  96 112

Ответ 4

Чтобы выбрать n-й элемент из любой начальной позиции

nth_element <- function(vector, starting_position, n) { 
  vector[seq(starting_position, length(vector), n)] 
  }

# E.g.
vec <- 1:12

nth_element(vec, 1, 3)
# [1]  1  4  7 10

nth_element(vec, 2, 3)
# [1]  2  5  8 11