Ho un vettore che contiene una sequenza di 1 e 0. Si supponga di esso è di lunghezza 166 ed èFinding subvector di lunghezza massima che contiene una piccola percentuale di 0 di
y <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, 1,1,1,1,1,0,1,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,1,1)
Ora voglio estrarre una LUNGA sub vettore pOSSIBILE dall'alto vettoriale, che soddisfa due proprietà
(1) sub-vettore dovrebbe iniziare da 1 e termina con 1.
(2) si può contenere fino a 5% del totale zeri lunghezza del sub-vettore.
Ho iniziato con la funzione rle
. Conta 1 e 0 ad ogni passo. Così sarà come
z <- rle(y)
d <- data.frame(z$values, z$lengths)
colnames(d) <- c("value", "length")
Mi dà
> d
value length
1 1 22
2 0 1
3 1 13
4 0 1
5 1 2
6 0 1
7 1 1
8 0 1
9 1 1
10 0 5
11 1 1
12 0 3
13 1 2
14 0 1
15 1 1
16 0 1
17 1 74
18 0 2
19 1 17
20 0 1
21 1 2
22 0 1
23 1 3
24 0 5
25 1 4
In questo caso 2+ + 17 74 + 1 + 2 + 3 = 99 è il sub-sequenza richiesta in quanto contiene 2+ 1 + 1 = 4 zeri che è inferiore al 5% di 99. Se andiamo avanti e la sequenza diventerà 99 + 5 + 4 = 108 e gli zeri saranno 4 + 5 = 9 che saranno più del 5% di 108.
Penso che il tuo sottosettore sia effettivamente di lunghezza 100 (74 + 2 + 17 + 1 + 2 + 1 + 3). – josliber