【问题标题】:Create lagged variables in panel data in Julia在 Julia 的面板数据中创建滞后变量
【发布时间】:2023-01-19 01:16:51
【问题描述】:

我正在尝试使用面板数据(ID 和年份)生成滞后变量。根据每个 ID,它可能有不同年份的面板,有时 ID 组内的年份不连续。例如,我们有以下数据集:

ID Year x
1 2001 3
1 2002 1
1 2006 2
1 2007 2
2 2002 1
2 2003 5
3 2006 2
3 2007 2
3 2008 4

我要生成的 x 的滞后变量是:

ID Year x x_lag
1 2001 3 .
1 2002 1 3
1 2006 2 .
1 2007 2 2
2 2002 1 .
2 2003 5 1
3 2006 2 .
3 2007 2 2
3 2008 4 2

我找到了一些关于如何按组创建滞后变量的其他答案,但它对我不起作用,因为我的数据集中的某些 ID 具有不连续的年份(例如上例中的第 2-3 行)。

所以,我正在使用我在下面写下的功能:

function lagged(data,x)
    for c in x
        data[:,c*"_lag"] .= 0.0
    end
    allowmissing!(data)
    for row in eachrow(data)
        for c in x
            if filter(y -> y.id == row.id && y.year == row.year - 1, data)[:,c] == []
                row[c*"_lag"] = missing
            else
                row[c*"_lag"] = filter(y -> y.id == row.id && y.year == row.year - 1, data)[:,c][1]
            end
        end
    end
    return data
end

但它非常慢......有没有更快的方法在不连续年份的面板数据中创建滞后变量?谢谢!

【问题讨论】:

    标签: julia lag


    【解决方案1】:

    你为什么不做

    transform!(groupby(df, :id), :x => lag, :year => lag)
    

    然后只保留 x_lag 值,其中 year_lag 为 1?

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2017-11-12
      • 2015-08-13
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      相关资源
      最近更新 更多