# Arithmetic operations on multi-dimensional arrays with Missings

**URL:** <https://discourse.julialang.org/t/arithmetic-operations-on-multi-dimensional-arrays-with-missings/11491>\
**Category:** New to Julia\
**Created:** [June 7, 2018, 8:00am UTC](https://discourse.julialang.org/t/arithmetic-operations-on-multi-dimensional-arrays-with-missings/11491 "2018-06-07T08:00:15Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![k945](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/k945/32/8906_2.png) [@k945](https://discourse.julialang.org/u/k945)\
**Post date:** [June 7, 2018, 8:00am UTC](https://discourse.julialang.org/t/arithmetic-operations-on-multi-dimensional-arrays-with-missings/11491/1 "2018-06-07T08:00:15Z")

</div>

Given arrays with missing values, I am unable to workout the mean of a mutli-dimensional array over a given region

For example,

```julia
x = convert(Array{Union{Float64,Missing}}, rand(2,2))
x[1] = missing
mean(skipmissing(x))

```

works as expected. However computing the mean over a given region, say `mean(skipmissing(x), 2)` returns an error indicating that the relevant method has not been defined.

Other than writing my own method (which I cannot do at the moment), is there a way to calculate the mean of a mutli-dimensional array with missing values over a given region?

---

<div class="post-metadata">

**Author:** ![fredrikekre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fredrikekre/32/1688_2.png) [@fredrikekre](https://discourse.julialang.org/u/fredrikekre)\
**Post date:** [June 7, 2018, 8:41am UTC](https://discourse.julialang.org/t/arithmetic-operations-on-multi-dimensional-arrays-with-missings/11491/2 "2018-06-07T08:41:29Z")

</div>

Perhaps something like

```julia
julia> x
2×2 Array{Union{Missing, Float64},2}:
  missing 0.848082
 0.125747 0.481677

julia> [mean(skipmissing(x[i, :])) for i in 1:size(x, 2)]
2-element Array{Float64,1}:
 0.8480819826358683
 0.3037118716331342

julia> hcat([mean(skipmissing(x[i, :])) for i in 1:size(x, 2)])
2×1 Array{Float64,2}:
 0.8480819826358683
 0.3037118716331342

```

where the `hcat` call is used to make the result into a `Matrix` (just like `mean(x, 2)` does) instead of a `Vector`.

---

<div class="post-metadata">

**Author:** ![fabiangans](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fabiangans/32/2624_2.png) [@fabiangans](https://discourse.julialang.org/u/fabiangans)\
**Post date:** [June 7, 2018, 10:17am UTC](https://discourse.julialang.org/t/arithmetic-operations-on-multi-dimensional-arrays-with-missings/11491/3 "2018-06-07T10:17:37Z")

</div>

Or using `mapslices`:

```julia
mapslices(xi->mean(skipmissing(xi)),x,1)

```

although this is probably slower than a hand-coded function.

---

<div class="post-metadata">

**Author:** ![k945](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/k945/32/8906_2.png) [@k945](https://discourse.julialang.org/u/k945)\
**Post date:** [June 8, 2018, 12:20am UTC](https://discourse.julialang.org/t/arithmetic-operations-on-multi-dimensional-arrays-with-missings/11491/4 "2018-06-08T00:20:55Z")

</div>

@fredrikekre, @fabiangans: both solutions worked. Thanks

---

<div class="post-metadata">

**Author:** ![stillyslalom](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stillyslalom/32/45687_2.png) [@stillyslalom](https://discourse.julialang.org/u/stillyslalom)\
**Post date:** [June 27, 2018, 8:29am UTC](https://discourse.julialang.org/t/arithmetic-operations-on-multi-dimensional-arrays-with-missings/11491/5 "2018-06-27T08:29:26Z")

</div>

I just submitted a PR to incorporate a generic version of this into base. [https://github.com/JuliaLang/julia/pull/27818](https://github.com/JuliaLang/julia/pull/27818)
