2015-03-05 4 views
0

у меня есть логический вектор y, и я хочу, чтобы разбить его на N части таким образом, что каждая часть имеет одинаковое количество TRUE значений (я не заботиться сколько FALSE значения в каждом часть). В частности, я хочу целочисленный вектор b длины N+1 такой, что b[1]=1, b[N+1]=length(y)+1 и abs(sum(y[b[i]:b[i+1])-sum(y)/N)<1.Разделить вектор на равные части по высоте

Алгоритм тривиально (используйте cumsum и which в цикле), но я хочу избежать цикла.

+1

Я думаю, что это поможет, если вы действительно можете представить воспроизводимый пример и желаемый результат. –

ответ

2
set.seed(1) 
x = sample(c(T,F), 20, T) 
#[1] TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE 
#[17] FALSE FALSE TRUE FALSE 

N = 3 
y = which(x) 
y[seq(1, length(y), by = length(y)/N)] 
#[1] 1 10 14 

Возможно дополнительно обернуть seq в round, в зависимости от числа и то, что вы хотите.

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