我有一個包含假設它的1和0的序列的載體是長度166,並且它是查找子向量0的
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)
現在我想提取從上述載體中,使得它滿足兩個屬性
一個最長可能的子矢量(1)子向量應當從1開始,並用總1.
(2)它可以含有至多5%的零結束子向量的長度。
我以rle
函數開始。它在每個步驟計數1和0。 所以它會像
z <- rle(y)
d <- data.frame(z$values, z$lengths)
colnames(d) <- c("value", "length")
它給我
> 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
在這種情況下74 + 17 2 + + 1 + 2 + 3 = 99是所需的子序列,因爲它含有2+ 1 + 1 = 4個零小於99的5%。如果我們向前移動並且序列將變爲99 + 5 + 4 = 108並且零將是4 + 5 = 9,這將會超過108的5%。
我認爲你的子向量實際上是長度爲100(74 + 2 + 17 + 1 + 2 + 1 + 3)。 – josliber