# How to make compact subset queries of a dataframe?

**URL:** <https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883>\
**Category:** Data\
**Tags:** dataframes\
**Created:** [March 12, 2020, 2:55pm UTC](https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883 "2020-03-12T14:55:35Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![HenriDeh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrideh/32/8316_2.png) [@HenriDeh](https://discourse.julialang.org/u/HenriDeh)\
**Post date:** [March 12, 2020, 2:55pm UTC](https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883/1 "2020-03-12T14:55:35Z")

</div>

I am looking for a more elegant way to do this

```julia
data[(data.ID .== 1) .| (data.ID .== 4) .| (data.ID .== 7) .| (data.ID .== 10),:]

```

where `data` is a DataFrame. I simply want to extract rows where the ID value is one of the four specified. I was trying stuff like `data.ID .== [1,4,7,10]`. But this breaks because of the broadcasting.

---

<div class="post-metadata">

**Author:** ![Skoffer](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/skoffer/32/378_2.png) [@Skoffer](https://discourse.julialang.org/u/Skoffer)\
**Post date:** [March 12, 2020, 3:05pm UTC](https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883/2 "2020-03-12T15:05:28Z")

</div>

One way to do it is by using `Ref`

```julia
julia> df = DataFrame(:ID => collect(1:10), :x => 'a':'j')
julia> df[in.(df.ID, Ref((1, 4, 7, 10))), :]

4×2 DataFrame
│ Row │ ID │ x │
│ │ Int64 │ Char │
├─────┼───────┼──────┤
│ 1 │ 1 │ 'a' │
│ 2 │ 4 │ 'd' │
│ 3 │ 7 │ 'g' │
│ 4 │ 10 │ 'j' │

```

---

<div class="post-metadata">

**Author:** ![dmolina](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dmolina/32/5246_2.png) [@dmolina](https://discourse.julialang.org/u/dmolina)\
**Post date:** [March 12, 2020, 3:06pm UTC](https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883/3 "2020-03-12T15:06:18Z")

</div>

It is easy with filter:

filter(row → row.ID in [1,4,7,10], data)

I suggest also to to read the [DataFrame Tutorial](https://github.com/bkamins/Julia-DataFrames-Tutorial), it is very informative about DataFrames.

```julia
julia> data = DataFrame(:ID=>[1, 4, 7, 10, 20])
5×1 DataFrame
│ Row │ ID │
│ │ Int64 │
├─────┼───────┤
│ 1 │ 1 │
│ 2 │ 4 │
│ 3 │ 7 │
│ 4 │ 10 │
│ 5 │ 20 │

julia> filter(row->row.ID in [1,4,7], data)
3×1 DataFrame
│ Row │ ID │
│ │ Int64 │
├─────┼───────┤
│ 1 │ 1 │
│ 2 │ 4 │
│ 3 │ 7 │

```

---

<div class="post-metadata">

**Author:** ![HenriDeh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrideh/32/8316_2.png) [@HenriDeh](https://discourse.julialang.org/u/HenriDeh)\
**Post date:** [March 12, 2020, 3:17pm UTC](https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883/4 "2020-03-12T15:17:11Z")

</div>

Okay thank you both, I’ll check out the tutorial

---

<div class="post-metadata">

**Author:** ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)\
**Post date:** [March 12, 2020, 4:36pm UTC](https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883/5 "2020-03-12T16:36:57Z")

</div>

> [@Skoffer](#):
>
> df[in.(df.ID, Ref((1, 4, 7, 10))), :]

I also like the `Fix2` version of `in` which I find more readable:

```julia
df[in([1, 4, 7, 10]).(df.ID), :]

```

---

<div class="post-metadata">

**Author:** ![evanfields](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/evanfields/32/1744_2.png) [@evanfields](https://discourse.julialang.org/u/evanfields)\
**Post date:** [March 12, 2020, 5:10pm UTC](https://discourse.julialang.org/t/how-to-make-compact-subset-queries-of-a-dataframe/35883/6 "2020-03-12T17:10:04Z")

</div>

Since nobody else has mentioned it, you might also find [DataFramesMeta](https://github.com/JuliaData/DataFramesMeta.jl) to be useful.
