# Group Selection by Condition in DataFramesMeta.jl

**URL:** https://discourse.julialang.org/t/group-selection-by-condition-in-dataframesmeta-jl/79784
**Category:** Data
**Tags:** dataframes, dataframesmeta
**Created:** [April 21, 2022, 1:51pm UTC](https://discourse.julialang.org/t/group-selection-by-condition-in-dataframesmeta-jl/79784 "2022-04-21T13:51:31Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![Rahul](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rahul/32/30545_2.png) [@Rahul](https://discourse.julialang.org/u/Rahul)
#### Post date: [April 21, 2022, 1:51pm UTC](https://discourse.julialang.org/t/group-selection-by-condition-in-dataframesmeta-jl/79784/1 "2022-04-21T13:51:31Z")

</div>

I am looking to select groups that follow a condition using DataFramesMeta.jl.

Reference example in R that I am looking to reproduce:

```julia
require(data.table)
df = data.table(id = c(rep(1, 10), rep(2, 10), rep(3, 10)),
                x1 = c(rep(NA, 10), rnorm(10), c(rnorm(5), rep(NA, 5))))
df[, if(any(!is.na(x1))) .SD, .(id)]
df[, if(all(!is.na(x1))) .SD, .(id)]

```

Thanks in advance!

---

<div class="post-metadata">

### Author: ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)
#### Post date: [April 21, 2022, 3:01pm UTC](https://discourse.julialang.org/t/group-selection-by-condition-in-dataframesmeta-jl/79784/2 "2022-04-21T15:01:46Z")

</div>

Unfortunately currently this is not very easy and you have to write:

```julia
filter(:x1 => x-> any(!ismissing, x), groupby(df, :id)) |> DataFrame
filter(:x1 => x-> all(!ismissing, x), groupby(df, :id)) |> DataFrame

```

However, in the upcoming release of DataFrames.jl (after [this PR](https://github.com/JuliaData/DataFrames.jl/pull/3032) is merged) you can write using DataFramesMeta.jl:

```julia
@chain df begin
    groupby(:id)
    @subset(any(!ismissing, :x1))
end
@chain df begin
    groupby(:id)
    @subset(all(!ismissing, :x1))
end

```
