Ответ 1
a <- 1:120
b <- a[seq(1, length(a), 6)]
Я хотел бы создать вектор, в котором каждый элемент является элементом i+6th
другого вектора.
Например, в векторе длиной 120 я хочу создать еще один вектор длиной 20, в котором каждый элемент является значением i, i+6, i+12, i+18...
исходного вектора, то есть я хочу извлечь каждый шестой элемент оригинала.
a <- 1:120
b <- a[seq(1, length(a), 6)]
Другим трюком для получения последовательных фрагментов (помимо уже упомянутого решения seq) является использование короткого логического вектора и использование утилизации векторов:
foo[ c( rep(FALSE, 5), TRUE ) ]
Я думаю, вы задаете две вещи, которые не обязательно одинаковы.
Я хочу извлечь каждый шестой элемент из оригинал
Вы можете сделать это, указав последовательность:
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
Чтобы выбрать 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