我在Matlab中有一个不平衡的面板数据集,我需要滞后。使用plm
包在R中使用不平衡的面板数据集非常容易。 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的值一年。请注意,对于Var1 = 3,1994没有值。因此,我想要以下内容:
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中有一种简单的方法吗?
答案 0 :(得分:0)
我自己使用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')