Используйте кратные индекса, чтобы сохранить или заменить значения в векторе - PullRequest
0 голосов
/ 23 ноября 2018

«Среднее» - это числовой вектор 1x756

Это последовательность (числовой вектор), которую я хочу написать:

L <- c(rep(0, 251), Mean[252],
       rep(0, 251), Mean[252*2],
       rep(0, 251), Mean[252*3])

То есть при значениях, кратных 252, я хочусохранить исходные значения.Другие индексы должны быть заменены на ноль.

Есть ли более умный способ написать это?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Используйте %% (по модулю) для последовательности вдоль вашего вектора с (первым) индексом замены в качестве делителя.Замените значения, в которых результат деления равен нулю *.

Mean[seq_along(Mean) %% 252 != 0] <- 0

Меньший пример, где также избегается жесткое кодирование первого индекса:

set.seed(2)
x <- sample(12)

x[seq_along(x) %% (length(x) / 3) != 0] <- 0
x
# [1]  0  0  0  2  0  0  0  5  0  0  0 10

* Благодаря@snoram за предложение более прямой альтернативы.

0 голосов
/ 23 ноября 2018

В R мы можем разбить на группы, а затем выполнить объединение

i1 <- rep(1:3, each = 252) 
i2 <- rep(1:3, each = 251)
unlist(Map(c, split(rep(0, 753), i2), split(Mean * i1, i1)), use.names = FALSE)

data

set.seed(24)
Mean <- rnorm(756) 
...