研究通常使用例如样本所在城市的人口、GDP 作为该样本本身变量的一些代理变量,最近有小伙伴想要使用上市公司子公司周边一定区域的 CO2 排放量作为其自身 CO2 排放量的代理变量,由于计算量比较大,于是我就帮忙处理了下。
借助地理计算,我们可以构建上市公司子公司周围半径一定距离的范围,然后以此来裁剪「1970~2024 年中国各省市区县、乡镇 CO2 排放量面板数据 & 栅格数据(EDGAR v2025)」中的栅格数据得到该范围内的 CO2 排放总量。
1970~2024 年中国各省市区县、乡镇 CO2 排放量面板数据 & 栅格数据(EDGAR v2025):https://rstata.duanshu.com/#/course/0753e7af840f4886a7c78ac8eafbfb50
上市公司子公司数据可以使用之前分享的:
1999~2023 年上市公司子公司经纬度及其所处的省市区县数据:https://rstata.duanshu.com/#/course/24376370188e4622b124f4a3199e395b
数据概览
为便于大家使用,我计算了 1990~2023 年上市公司子公司周边 1km、2km、3km、4km、5km、10km、15km、20km、25km、30km 范围内的 CO2 排放总量,最终得到了附件中的:
- 1999
2023年上市公司子公司周边130km范围内的碳排放量面板数据.dta
![]()
经过计算之后一共得到了 1074 万条结果,包含如下变量:
- zgsid
- year
- CO2_emissions
- dist
历年上市公司子公司周边平均 CO2 排放量如下图所示:
![]()
计算方法
计算方法类似下面这个课程,感兴趣的小伙伴可以学习:
使用 R 语言计算工企周边一定范围内的平均 PM2.5 浓度:https://rstata.duanshu.com/#/course/016330182fb64ecd9fab8ada0d816130
首先分别生成了上市公司子公司周边 1~30km 的缓冲区,例如上市公司子公司 5km 的缓冲区是这样生成的:
library(tidyverse) |
这样会得到一个以每个上市公司子公司为中心、半径为 5km 的圆形区域。
然后读取碳排放量栅格数据,例如 2023 年的:
library(terra) |
然后使用上面的缓冲区数据和栅格数据进行地理计算就可以得到每个缓冲区内的碳排放总量了!例如 5km 的:
terra::extract(rst, vect(df2_5km), fun = "sum", na.rm = T, exact = T) %>% |
按照这个思路循环各个年份的即可(不过运算量非常大,建议大家不要尝试,非常耗时)。
为了便于大家理解这个计算过程,我绘制了一幅这样的图(下图为上市公司附近 5km 图示,上市公司子公司类似):
![]()
方格子就是栅格数据,圆圈是上市公司子公司周围 5km 范围的缓冲区。例如某个缓冲区和四个格子交叉,那么就是根据交叉部分的比例计算其范围内的碳排放总量。
代码
为方便大家学习,附件中还提供了数据处理和绘图代码以供参考:
![]()
数据引用格式
由于该数据包含较多 RStata 处理的内容,在研究中使用该数据请使用清晰的方式注明数据来源于 RStata 或者 RStata 数据中心,并使用如下格式引用:
RStata 数据中心: 1999~2023年上市公司子公司周边1~30km范围内的碳排放量面板数据. 2025. https://tidyfriday.cn/rsdb2/
英文文献可以使用下面的格式引用:
RStata Data Center: Panel Data on Carbon Emissions within Radii of 1 to 30 km from Subsidiaries of Listed Companies, 1999–2023. 2025. https://tidyfriday.cn/rsdb2/
点击这里跳转到 RStata 短书平台获取附件:1999~2023 年上市公司子公司周边 1~30km 范围内的碳排放量面板数据
评论