28 Subsetting Rles

Rles can be subsetted using an integer (or a list of integers) to get the RLE value at one or more points.

from pyrle import Rle
r = Rle([3, 2, 1, 1, 1, 1], [0, 1, 2, 1, 0, 1])
print(r)
## +--------+-----+-----+-----+-----+-----+-----+
## | Runs   | 3   | 2   | 1   | 1   | 1   | 1   |
## |--------+-----+-----+-----+-----+-----+-----|
## | Values | 0.0 | 1.0 | 2.0 | 1.0 | 0.0 | 1.0 |
## +--------+-----+-----+-----+-----+-----+-----+
## Rle of length 9 containing 6 elements (avg. length 1.5)
print(r[2], r[3])
## 0.0 1.0
print(r[[3, 5, 7]])
## [1. 2. 0.]

To get the slice of one or more run lengths use a slice or a dataframe with (at least) the columns Start and End.

import pandas as pd
from pyrle import Rle
r = Rle([3, 2, 1, 1, 1, 1], [0, 1, 2, 1, 0, 1])
print(r[5:10])
## +--------+-----+-----+-----+-----+
## | Runs   | 1   | 1   | 1   | 1   |
## |--------+-----+-----+-----+-----|
## | Values | 2.0 | 1.0 | 0.0 | 1.0 |
## +--------+-----+-----+-----+-----+
## Rle of length 4 containing 4 elements (avg. length 1.0)
df = pd.DataFrame({"Start": [2, 5], "End": [4, 900]})
print(df.to_csv(index=False, sep="\t"))
## Start    End
## 2    4
## 5    900
print(r[df], end="\n")
##    Start  End  ID  Run  Value
## 0      2    4   0    1    0.0
## 1      2    4   0    1    1.0
## 2      5  900   1    1    2.0
## 3      5  900   1    1    1.0
## 4      5  900   1    1    0.0
## 5      5  900   1    1    1.0