Задержка несбалансированного набора данных панели в Matlab

У меня есть несбалансированный набор данных панели в Matlab, который мне нужно отстать. С несбалансированными панельными наборами данных довольно легко работать в R с пакетом plm. Есть ли аналогичная функция в Matlab? Вот пример игрушки:

A = table(sort([repmat([1;2],4,1);repmat(3,3,1)]),[repmat((1994:1997).',2,1);(1995:1997).'],normrnd(100,1,11,1))

A = 

    Var1    Var2     Var3 
    ____    ____    ______

    1       1994    98.423
    1       1995    100.51
    1       1996    100.28
    1       1997    100.03
    2       1994    98.666
    2       1995    101.13
    2       1996    100.35
    2       1997    99.701
    3       1995    100.02
    3       1996    99.738
    3       1997     98.25

Для каждого экземпляра Var1 я хотел бы отложить значение Var3 на один год. Обратите внимание, что для 1994 года для Var1=3 нет значения. Таким образом, я хотел бы следующее:

    Var1    Var2     Var3      Var4 
    ____    ____    ______    ______

    1       1994    98.423       NaN
    1       1995    100.51    98.423
    1       1996    100.28    100.51
    1       1997    100.03    100.28
    2       1994    98.666       NaN
    2       1995    101.13    98.666
    2       1996    100.35    101.13
    2       1997    99.701    100.35
    3       1995    100.02       NaN
    3       1996    99.738    100.02
    3       1997     98.25    99.738

Есть ли простой способ сделать это в Matlab?


person Mace    schedule 19.12.2014    source источник


Ответы (1)


Я сам нашел решение, используя varfun:

A = table(sort([repmat([1;2],4,1);repmat(3,3,1)]),[repmat((1994:1997).',2,1);(1995:1997).'],normrnd(100,1,11,1))

B = varfun(@(x)lagmatrix(x,1),A,'GroupingVariables','Var1')
person Mace    schedule 19.12.2014