# Filtering rows based on VEP

**URL:** <https://discuss.hail.is/t/filtering-rows-based-on-vep/2457>\
**Category:** Hail Query & hailctl\
**Created:** [January 31, 2022, 8:07pm UTC](https://discuss.hail.is/t/filtering-rows-based-on-vep/2457 "2022-01-31T20:07:56Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![genome](https://avatars.discourse-cdn.com/v4/letter/g/9f8e36/32.png) [@genome](https://discuss.hail.is/u/genome)\
**Post date:** [January 31, 2022, 8:07pm UTC](https://discuss.hail.is/t/filtering-rows-based-on-vep/2457/1 "2022-01-31T20:07:56Z")

</div>

Hi all, I am trying to obtain a subset of my MatrixTable that has been annotated with VEP.  
It is accessed by:  
`vep_most_severe_consequence = mt.most_severe_consequence`  
and it is a string expression  
I tried:

```auto
vep_most_severe_consequence = mt.most_severe_consequence
mt.filter_rows(hl.is_defined(vep_most_severe_consequence == 'frameshift_variant'))

```

But that did not seem to work. Can I get advice on how to get this to work? Thank you so much

---

<div class="post-metadata">

**Author:** ![danking](https://yyz2.discourse-cdn.com/flex036/user_avatar/discuss.hail.is/danking/32/43_2.png) [@danking](https://discuss.hail.is/u/danking)\
**Post date:** [January 31, 2022, 8:12pm UTC](https://discuss.hail.is/t/filtering-rows-based-on-vep/2457/2 "2022-01-31T20:12:52Z")

</div>

You don’t need `hl.is_defined` that checks if a value is missing or not. I think you just want:

```auto
mt = mt.filter_rows(mt.most_severe_consequence == 'frameshift_variant'))

```

---

<div class="post-metadata">

**Author:** ![genome](https://avatars.discourse-cdn.com/v4/letter/g/9f8e36/32.png) [@genome](https://discuss.hail.is/u/genome)\
**Post date:** [January 31, 2022, 8:15pm UTC](https://discuss.hail.is/t/filtering-rows-based-on-vep/2457/3 "2022-01-31T20:15:31Z")

</div>

> [@danking](#):
>
> `mt.filter_rows(mt.most_severe_consequence == 'frameshift_variant'))`

Thanks! If I want to obtain a subset by multiple strings, will the `or` operator work?

---

<div class="post-metadata">

**Author:** ![danking](https://yyz2.discourse-cdn.com/flex036/user_avatar/discuss.hail.is/danking/32/43_2.png) [@danking](https://discuss.hail.is/u/danking)\
**Post date:** [January 31, 2022, 8:17pm UTC](https://discuss.hail.is/t/filtering-rows-based-on-vep/2457/4 "2022-01-31T20:17:54Z")

</div>

Try:

```auto
mt = mt.filter_rows(hl.set(['frameshift_variant', 'stop_gained']).contains(mt.most_severe_consequence))

```

In general, for boolean conditions, in Hail, you must do: `(xx == yy) | (zz == aa)` the `|` is or and the parentheses are required due to precedence issues.

---

<div class="post-metadata">

**Author:** ![genome](https://avatars.discourse-cdn.com/v4/letter/g/9f8e36/32.png) [@genome](https://discuss.hail.is/u/genome)\
**Post date:** [January 31, 2022, 8:21pm UTC](https://discuss.hail.is/t/filtering-rows-based-on-vep/2457/5 "2022-01-31T20:21:50Z")

</div>

> [@danking](#):
>
> `mt = mt.filter_rows(hl.set(['frameshift_variant', 'stop_gained']).contains(mt.most_severe_consequence))`

That works too! Just to check, would it be similar to:  
mt.filter\_rows(mt.most\_severe\_consequence == ‘frameshift\_variant’ | mt.most\_severe\_consequence == ‘stop\_gained’ ))

---

<div class="post-metadata">

**Author:** ![danking](https://yyz2.discourse-cdn.com/flex036/user_avatar/discuss.hail.is/danking/32/43_2.png) [@danking](https://discuss.hail.is/u/danking)\
**Post date:** [January 31, 2022, 9:12pm UTC](https://discuss.hail.is/t/filtering-rows-based-on-vep/2457/6 "2022-01-31T21:12:23Z")

</div>

No, when using `|` you \*must` wrap both sides in parentheses:

```auto
mt.filter_rows(
    (mt.most_severe_consequence == 'frameshift_variant') | (mt.most_severe_consequence == 'stop_gained')
)

```
