r-包括数据帧的三级伪变量



让我们考虑删除了300行的面板数据

data("EmplUK", package="plm")
set.seed(42)
EmplUK<-EmplUK[-sample(1:nrow(EmplUK),300),]
firm year sector    emp    wage capital   output
1    1 1977      7  5.041 13.1516  0.5894  95.7072
4    1 1980      7  4.715 13.8039  0.6171 100.5501
5    1 1981      7  4.093 14.2897  0.5076  99.5581
6    1 1982      7  3.166 14.8681  0.4229  98.6151
7    1 1983      7  2.936 13.7784  0.3920 100.0301
8    2 1977      7 71.319 14.7909 16.9363  95.7072

我想添加关于年份的三级伪变量。(所以我想增加三列(。

问题是,每家公司的观测年份并不相同,即一家公司有1977年、1980年、1981年、1982年。因此,伪变量应该是:

1 0 0
0 1 0
0 0 1
1 0 0 

第三家公司有197719791980198119821983。傻瓜应该按照看

1 0 0
0 1 0 
0 0 1
1 0 0 
0 1 0 
0 0 1

我知道要创建伪变量,我们只需要使用命令:

model.matrix(~ factor(cycle(ts(EmplUK, frequency = 3)))+0) 

但我不知道如何将其划分为年份。你知道如何调整吗?

您可以通过为每个公司重复c(1,2,3)来首先创建一个因子变量。然后,使用model.matrix将其展开为虚拟对象。

EmplUK <- within(EmplUK, {
dummy <- as.factor(ave(year, firm, FUN = function(x) rep_len(c(1L, 2L, 3L), length(x))))
})
cbind(EmplUK, model.matrix(~ dummy - 1, data = EmplUK))

输出看起来像这个

firm year sector       emp    wage capital   output dummy dummy1 dummy2 dummy3
1     1 1977      7  5.041000 13.1516  0.5894  95.7072     1      1      0      0
2     1 1978      7  5.600000 12.3018  0.6318  97.3569     2      0      1      0
3     1 1979      7  5.015000 12.8395  0.6771  99.6083     3      0      0      1
4     1 1980      7  4.715000 13.8039  0.6171 100.5501     1      1      0      0
5     1 1981      7  4.093000 14.2897  0.5076  99.5581     2      0      1      0
6     1 1982      7  3.166000 14.8681  0.4229  98.6151     3      0      0      1
7     1 1983      7  2.936000 13.7784  0.3920 100.0301     1      1      0      0
8     2 1977      7 71.319000 14.7909 16.9363  95.7072     1      1      0      0
9     2 1978      7 70.642998 14.1036 17.2422  97.3569     2      0      1      0
10    2 1979      7 70.917999 14.9534 17.5413  99.6083     3      0      0      1
11    2 1980      7 72.030998 15.4910 17.6574 100.5501     1      1      0      0
12    2 1981      7 73.689003 16.1969 16.7133  99.5581     2      0      1      0
13    2 1982      7 72.418999 16.1314 16.2469  98.6151     3      0      0      1
14    2 1983      7 68.517998 16.3051 17.3696 100.0301     1      1      0      0
...

最新更新