Мой вопрос прост, но все же я не смог найти решение в Интернете.Последовательности различной длины в R
У меня есть вектор, например. a = c(7,3,5)
. Мне нужно преобразовать его в b = c(0,1,2,3,4,5,6,0,1,2,0,1,2,3,4)
. Я могу сделать это с петлей, но слишком медленно, когда длина (а)> 500000.
m <- 0
n <- 0
for (i in 1:length(a)) {
m <- n+1;
n <- n+a[i];
b[m:n] <- (0:(a[i]-1));
}
Есть один вкладыш в R, который может производить описанное поведение очень быстро? Может ли такой же подход преобразовать вектор a в c = c(0,0,0,0,0,0,1,0,0,1,0,0,0,0,1)
?
'x <- последовательность (a) - 1; Икс; as.integer (c (diff (x)! = 1, TRUE)) - одна из возможностей. – Henrik
Для второго вектора вы также можете использовать 'x <- integer (sum (a)); x [cumsum (a)] <- 1L' –
Для первого варианта другой вариант: 'g1 <- rep (seq_along (a), a); ve (seq_along (g1), g1, FUN = seq_along) -1' – akrun