【问题标题】:Including three level dummy variables to data frame将三级虚拟变量包含到数据框中
【发布时间】:2020-12-02 16:07:11
【问题描述】:

让我们考虑删除了 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 

公司三有 1977,1979,1980,1981,1982,1983。假人应该如下所示

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) 

但我不知道如何将其划分为年份。你有什么想法可以调整吗?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您可以首先通过为每个公司重复 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
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 2019-02-08
      • 2015-09-30
      • 1970-01-01
      相关资源
      最近更新 更多