宽型数据转为长形?

如何将宽型数据转为长形?

julia> df = DataFrame(id = [1, 2, 3], gdp1999 = [2, 3, 4], gdp2000 = [3, 4, 5],
                      gdp2001 = [6, 7, 8], emp1999 = [3, 2, 1], emp2000 = [4, 7, 9],
                      emp2001 = [5, 4, 2])
3×7 DataFrame
 Row │ id     gdp1999  gdp2000  gdp2001  emp1999  emp2000  emp2001
     │ Int64  Int64    Int64    Int64    Int64    Int64    Int64
─────┼─────────────────────────────────────────────────────────────
   1 │     1        2        3        6        3        4        5
   2 │     2        3        4        7        2        7        4
   3 │     3        4        5        8        1        9        2

这是我想要的结果

Row │ id     year       gdp     emp
     │ Int64  SubStrin…  Int64?  Int64?
─────┼──────────────────────────────────
   1 │     1  1999            2       3
   2 │     1  2000            3       4
   3 │     1  2001            6       5
   4 │     2  1999            3       2
   5 │     2  2000            4       7
   6 │     2  2001            7       4
   7 │     3  1999            4       1
   8 │     3  2000            5       9
   9 │     3  2001            8       2

无脑for循环加Vector of Dict,最后转Dataframe解决一切数据处理问题

谢谢。能写一下吗

贴在英文 discourse 上的同一个问题 https://discourse.julialang.org/t/how-to-reshape-wide-to-long/83284 (防止重复回答)