首页 > 解决方案 > R 等价于 Stata `tabulate , generate()` 命令

问题描述

我想tabulate , generate()在 R 中模仿 Stata 命令的行为。如下图所示;该命令的功能是双重的。首先,在我的示例中,它生成一个频率计数单向表。其次,它使用选项中声明var1的前缀 ( stubname ) 为变量 () 中包含的每个值生成虚拟变量,,generate()以命名生成的虚拟变量 ( d_1 - d_7)。我的问题是关于第二个功能。首选基于 R 的解决方案,但也欢迎打包依赖。

[编辑]:我的最终目标是生成一个data.frame()模拟屏幕上打印的最后一个数据集。

clear all
input var1 
0
1
2
2
2
2
42
42
777
888
999999
end
tabulate var1 ,gen(d_)

/*     var1 |      Freq.     Percent        Cum.
------------+-----------------------------------
          0 |          1        9.09        9.09
          1 |          1        9.09       18.18
          2 |          4       36.36       54.55
         42 |          2       18.18       72.73
        777 |          1        9.09       81.82
        888 |          1        9.09       90.91
     999999 |          1        9.09      100.00
------------+-----------------------------------
      Total |         11      100.00          */


list, sep(11)



/*   +--------------------------------------------------+
     |   var1   d_1   d_2   d_3   d_4   d_5   d_6   d_7 |
     |--------------------------------------------------|
  1. |      0     1     0     0     0     0     0     0 |
  2. |      1     0     1     0     0     0     0     0 |
  3. |      2     0     0     1     0     0     0     0 |
  4. |      2     0     0     1     0     0     0     0 |
  5. |      2     0     0     1     0     0     0     0 |
  6. |      2     0     0     1     0     0     0     0 |
  7. |     42     0     0     0     1     0     0     0 |
  8. |     42     0     0     0     1     0     0     0 |
  9. |    777     0     0     0     0     1     0     0 |
 10. |    888     0     0     0     0     0     1     0 |
 11. | 999999     0     0     0     0     0     0     1 |
     +--------------------------------------------------+ */

标签: rstatadummy-variable

解决方案


我猜您假设其中的每个值var_1都是唯一的,以便您获得虚拟变量而不是d_字段中的计数。

你可以尝试这样的事情:

var1 <- 1:5
dummy_matrix <- vapply(var1, function(x) as.numeric(var1 == x), rep(1, 5)) # create a matrix of dummy vars
colnames(dummy_matrix) <- paste0("d_", var1) # name the columns
cbind(var1, dummy_matrix) # bind to var1

输出:

  var1 d_1 d_2 d_3 d_4 d_5
1    1   1   0   0   0   0
2    2   0   1   0   0   0
3    3   0   0   1   0   0
4    4   0   0   0   1   0
5    5   0   0   0   0   1

推荐阅读