Calculating Rate of change by year for each sector

You can use the package ShiftedArrays.

using DataFrames
import ShiftedArrays: lag

# mock data
using Random; Random.seed!(1234)
dff = DataFrame(year = repeat(2017:2021, inner=5), sector = repeat(["A", "B", "C", "D", "E"],5), roa = rand(25))

# computation
sort!(dff, [:sector, :year])                                    # sort data by the group and year
transform!(groupby(dff,[:sector]), :roa => lag => :prev_roa)    # create lag value
dff.rate_change = (dff.roa ./ dff.prev_roa .- 1 ) * 100         # create rate_change

with output

julia> dff
25×5 DataFrame
 Row │ year   sector  roa       prev_roa        rate_change   
     │ Int64  String  Float64   Float64?        Float64?
─────┼────────────────────────────────────────────────────────
   1 │  2017  A       0.579862  missing         missing
   2 │  2018  A       0.639562        0.579862       10.2955
   3 │  2019  A       0.566704        0.639562      -11.3918
  ⋮  │   ⋮      ⋮        ⋮            ⋮               ⋮
  23 │  2019  E       0.806704        0.696041       15.899
  24 │  2020  E       0.939548        0.806704       16.4674
  25 │  2021  E       0.131026        0.939548      -86.0544
                                               19 rows omitted
2 Likes