r - 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 |
+--------------------------------------------------+ */
解决方案
我猜您假设其中的每个值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
推荐阅读
- javascript - 在Javascript中过滤数组对象
- node.js - 为 Firebase 函数设置部署 URL
- amazon-web-services - 使用 jq 从 EC2 实例中获取名称标签的值
- r - R plotly 仅显示堆叠条形图中的标签,其中堆栈的百分比值高于 5
- python - 虽然循环问题。结果不是我所期望的
- javascript - 在由 getElementById 填充的文本输入中保留第一个零
- excel - 将 pos,neg 值替换到另一张纸上
- python - 石墨烯在其响应中发送 Python 错误消息 - 我如何告诉它更加离散?
- python - 如果字符串以开头,Python Pandas 替换子字符串
- angular - 在组件中组合输入/服务数据