已知每个公司的注册地,如何生成公司是否注册在同一个城市的零一矩阵?

最近有个小伙伴问到了这一个问题:

已知每个公司的注册地,如何生成公司是否注册在同一个城市的零一矩阵?

图表

首先我们用 Stata 来解决下:

clear all
input 上市公司 str6 注册地
1 "上海"
2 "深圳"
3 "上海"
4 "深圳"
end
save data1, replace

然后对两个变量进行重命名:

use data1, clear
ren 上市公司 上市公司1
ren 注册地 注册地1
save data2, replace

使用 cross 命令把两个数据交叉匹配起来,判断下各个公司对是否位于同一个城市再 spread 成宽数据即可:

use data1, clear
cross using data2
gen v = (注册地 == 注册地1)
drop 注册地*
tostring 上市公司1, replace
replace 上市公司1 = "_" + 上市公司1
spread 上市公司1 v

R 语言处理的思路类似:

library(tidyverse)
tribble(
~上市公司, ~注册地,
1, "上海",
2, "深圳",
3, "上海",
4, "深圳",
) -> df1

df1 %>%
crossing(
df1 %>%
set_names(c("上市公司1", "注册地1"))
) %>%
mutate(v = as.numeric(注册地 == 注册地1)) %>%
select(-contains("注册地")) %>%
spread(上市公司1, v)

#> # A tibble: 4 x 5
#> 上市公司 `1` `2` `3` `4`
#> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 0 1 0
#> 2 2 0 1 0 1
#> 3 3 1 0 1 0
#> 4 4 0 1 0 1

点击这里跳转到 RStata 短书平台获取附件:已知每个公司的注册地,如何生成公司是否注册在同一个城市的零一矩阵?

评论