# Calculating YoY Rate of Change on DF

**URL:** <https://discourse.julialang.org/t/calculating-yoy-rate-of-change-on-df/71715>\
**Category:** Finance and Economics\
**Tags:** dataframes\
**Created:** [November 18, 2021, 10:18am UTC](https://discourse.julialang.org/t/calculating-yoy-rate-of-change-on-df/71715 "2021-11-18T10:18:02Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![YummyPampers2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yummypampers2/32/27328_2.png) [@YummyPampers2](https://discourse.julialang.org/u/YummyPampers2)\
**Post date:** [November 18, 2021, 10:18am UTC](https://discourse.julialang.org/t/calculating-yoy-rate-of-change-on-df/71715/1 "2021-11-18T10:18:02Z")

</div>

Hello Folks:

I have a DF that looks like:

```julia
Year = (2016:1:2021,6)
Col1= rand(60:0.5:65, 6)
Col2 = rand(20:0.5:25, 6)

```

I would like to calculate the rate of  
change starting from year 2016 for  
both Col1 and Col2.

Might you have some methods to  
share?

Thanks,

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [November 18, 2021, 11:03am UTC](https://discourse.julialang.org/t/calculating-yoy-rate-of-change-on-df/71715/2 "2021-11-18T11:03:16Z")

</div>

I think you want  
`[missing; diff(df.Col1)]` ?

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [November 18, 2021, 11:12am UTC](https://discourse.julialang.org/t/calculating-yoy-rate-of-change-on-df/71715/3 "2021-11-18T11:12:15Z")

</div>

Or with a different [definition of rate of change](https://www.investopedia.com/terms/r/rateofchange.asp):

```julia
df[!,:ROC1] = [missing; (df.Col1[2:end]./df.Col1[1:end-1] .- 1)*100]

```

---

<div class="post-metadata">

**Author:** ![YummyPampers2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yummypampers2/32/27328_2.png) [@YummyPampers2](https://discourse.julialang.org/u/YummyPampers2)\
**Post date:** [November 18, 2021, 6:39pm UTC](https://discourse.julialang.org/t/calculating-yoy-rate-of-change-on-df/71715/4 "2021-11-18T18:39:12Z")

</div>

@rafael.guerra Thank you for this!

I applied the following modification for presentation purposes:

```julia
df[!,:ROC1] = [missing; (round.(df.Col1[2:end] ./ df.Col1[1:end-1] .- 1, digits=2)) .*100]

```

---

<div class="post-metadata">

**Author:** ![pdeffebach](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pdeffebach/32/10320_2.png) [@pdeffebach](https://discourse.julialang.org/u/pdeffebach)\
**Post date:** [November 18, 2021, 6:44pm UTC](https://discourse.julialang.org/t/calculating-yoy-rate-of-change-on-df/71715/5 "2021-11-18T18:44:51Z")

</div>

I would do

```julia
using ShiftedArrays
@transform! df :Col1_diff = :Col1 .- lag(:Col1)

```
