2013-03-21 6 views
0

Я пытаюсь выполнить симуляцию последовательности, которая имеет длину N (изменяется от 10k до 3M), представленная вектором, который имеет n 1 и s 0, где N = N + s.Эффективное сокращение вектора R до суммарного вектора

Я хотел бы свести это к вектору на форме c (137, 278, 21271, 124162, ...), где числа - это число последовательных 1 в исходном векторе. Поскольку мне нужно сделать это ~ 100 000 раз для моделирования, которое я делаю, я ищу как эффективный метод, насколько это возможно!

Спасибо!

Martin

+0

Что вы пытаетесь достичь, поставив вектор в этой форме? –

+0

'rle' приходит на ум. –

+0

@JoshuaUlrich - Я пытаюсь оценить вероятности определенных длин 1 и 0 заданных разных значений, и я слишком плохо отношусь к теории вероятностей для вычисления точного ответа. – Norling

ответ

3

вы можете использовать rle, чтобы получить, что

x <- sample(c(1, 0), size = 3e+06, replace = TRUE) 
x.rle <- rle(x) 
x.rle 
## Run Length Encoding 
## lengths: int [1:1499270] 4 1 2 3 4 1 1 3 1 4 ... 
## values : num [1:1499270] 0 1 0 1 0 1 0 1 0 1 ... 

vectorOf1 <- x.rle$lengths[x.rle$values == 1] 
vectorOf2 <- x.rle$lengths[x.rle$values == 0] 

head(vectorOf1, 20) 
## [1] 1 3 1 3 4 3 1 1 1 4 4 2 3 1 1 4 1 1 1 1 

head(vectorOf2, 20) 
## [1] 4 2 4 1 1 1 1 5 2 2 2 1 3 3 7 2 1 1 1 2 
+0

Работает отлично! Спасибо! – Norling

0

rle функция является обычным способом для этого.

Смежные вопросы