楼主: 萌少啊
88 0

[程序分享] 01-GlobalBurdenR包入门-数据读取与三线表生成 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-1-11
最后登录
2018-1-11

楼主
萌少啊 发表于 2025-11-17 18:25:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

GlobalBurdenR包系列教程(一):从数据读取到三线表生成

5分钟上手GlobalBurdenR,掌握GBD数据分析的首要步骤

开篇:你是否面临过这些问题?

如果你正在从事GBD(Global Burden of Disease)数据分析,你可能遇到:

  • 数据量庞大: IHME下载的数据包含数十个CSV文件,每个文件数百MB,用Excel根本无法打开
  • 列名混乱: 原始数据有
    measure_name
    location_name
    等18列,列名冗长且不统一
  • 国家名称不规范: “People’s Republic of China”、“中国”、“China”…同一个国家有多种写法
  • 三线表制作耗时: 手工整理1990年vs 2023年的数据对比,统计学指标计算,Word排版…耗时数小时

如果你有上述困扰,GlobalBurdenR包将彻底解决这些问题!

本文目标

读完本文,你将学会:

  • 使用GlobalBurdenR包一键读取并合并多个GBD数据文件
  • 规范化国家名称,统一数据格式
  • 自动生成符合发表要求的三线表(Word格式)
  • 理解GBD数据的基本结构和质量检查方法

本文使用真实的GBD 2023结核病数据进行演示!

第一步:环境准备

1.1 安装GlobalBurdenR包

# 安装devtools包(如果尚未安装)
install.packages("devtools")
# 从本地安装GlobalBurdenR
devtools::install("path/to/GlobalBurdenR")
# 或者从GitHub安装(如果包已上传)
# devtools::install_github("username/GlobalBurdenR")

1.2 加载包和依赖

library(GlobalBurdenR)
# 一键加载所有必需的依赖包(~30个包)
library_required_packages()

运行结果:

授权验证通过,欢迎使用 GlobalburdenR 包!

=== 第1步: 加载必需包 ===
所有包已成功加载。

提示:

library_required_packages()
会自动加载dplyr, ggplot2, data.table等30+个必需包,无需手动逐个加载!

第二步:数据读取与合并

2.1 数据准备

本案例使用的数据:

  • 数据来源: IHME GBD Results Tool (https://vizhub.healthdata.org/gbd-results/)
  • 疾病: 结核病(Tuberculosis)
  • 数据类型: 死亡数据(Deaths)
  • 年份范围: 1990-2023
  • 地理范围: 全球所有国家和地区
  • 文件格式: 6个ZIP压缩包

2023数据/
├── IHME-GBD_2023_DATA-04733f0b-1.zip  (3.3 MB)
├── IHME-GBD_2023_DATA-1bc6efb6-1.zip  (437 KB)
├── IHME-GBD_2023_DATA-2faedb75-1.zip  (3.5 MB)
├── IHME-GBD_2023_DATA-7e65b113-1.zip  (54 KB)
├── IHME-GBD_2023_DATA-e78489ab-1.zip  (3.5 MB)
└── IHME-GBD_2023_DATA-fa473aeb-1.zip  (514 KB)

2.2 使用GlobalBurdenR一键读取

# 设置工作目录
setwd('/Users/yuzheng/Documents/GBD数据/2023SDI和pop数据')
# 一行代码读取并合并所有ZIP文件!
data <- unzip_and_merge_csv_files_vroom_progress('2023数据/')

运行过程实时显示:

=== 第2步: 读取并合并2023数据 ===
找到 6 个压缩文件,开始解压缩...
正在解压文件 1,共 6 个: IHME-GBD_2023_DATA-04733f0b-1.zip
成功解压: IHME-GBD_2023_DATA-04733f0b-1.zip
正在解压文件 2,共 6 个: IHME-GBD_2023_DATA-1bc6efb6-1.zip
成功解压: IHME-GBD_2023_DATA-1bc6efb6-1.zip
正在解压文件 3,共 6 个: IHME-GBD_2023_DATA-2faedb75-1.zip
成功解压: IHME-GBD_2023_DATA-2faedb75-1.zip
正在解压文件 4,共 6 个: IHME-GBD_2023_DATA-7e65b113-1.zip
成功解压: IHME-GBD_2023_DATA-7e65b113-1.zip
正在解压文件 5,共 6 个: IHME-GBD_2023_DATA-e78489ab-1.zip
成功解压: IHME-GBD_2023_DATA-e78489ab-1.zip
正在解压文件 6,共 6 个: IHME-GBD_2023_DATA-fa473aeb-1.zip
成功解压: IHME-GBD_2023_DATA-fa473aeb-1.zip

找到 6 个CSV文件,开始合并...
正在读取CSV文件 1,共 6 个: IHME-GBD_2023_DATA-04733f0b-1.csv
正在读取CSV文件 2,共 6 个: IHME-GBD_2023_DATA-1bc6efb6-1.csv
正在读取CSV文件 3,共 6 个: IHME-GBD_2023_DATA-2faedb75-1.csv
正在读取CSV文件 4,共 6 个: IHME-GBD_2023_DATA-7e65b113-1.csv
正在读取CSV文件 5,共 6 个: IHME-GBD_2023_DATA-e78489ab-1.csv
正在读取CSV文件 6,共 6 个: IHME-GBD_2023_DATA-fa473aeb-1.csv

成功合并 6 个CSV文件,总行数: 312018
清理临时解压目录...

2.3 查看读取结果

cat("数据读取完成!\n")
cat("- 数据行数:", nrow(data), "\n")
cat("- 数据列数:", ncol(data), "\n")
cat("- 列名:", paste(names(data), collapse=", "), "\n")
head(data, 3)

输出结果:

数据读取完成!
- 数据行数: 312018
- 数据列数: 16
- 列名: measure_id, measure_name, location_id, location_name, sex_id, sex_name,
        age_id, age_name, cause_id, cause_name, metric_id, metric_name,
        year, val, upper, lower

# A tibble: 3 × 16
  measure_id measure_name location_id location_name  sex_id sex_name age_id
       <dbl> <chr>              <dbl> <chr>           <dbl> <chr>     <dbl>
1          1 Deaths               298 American Samoa      3 Both          1
2          1 Deaths               298 American Samoa      3 Both          1
3          1 Deaths               298 American Samoa      3 Both          6

# ... with 9 more variables: age_name <chr>, cause_id <dbl>, cause_name <chr>,
#   metric_id <dbl>, metric_name <chr>, year <dbl>, val <dbl>, upper <dbl>,
#   lower <dbl>

数据规模: 31万行数据,涵盖1990-2023年全球结核病死亡数据

2.4 为何此函数强大?

unzip_and_merge_csv_files_vroom_progress()
的优势:

  • 自动解压缩: 无需手动解压ZIP文件
  • 批量读取: 自动识别目录下所有CSV文件并合并
  • 高性能: 基于vroom包,读取速度比read.csv快10-50倍
  • 进度显示: 实时显示处理进度,大文件不再焦虑
  • 自动清理: 读取完成后自动删除临时解压文件
  • 错误处理: 单个文件损坏不影响整体流程

第三步:国家名称规范化

3.1 为何需要规范化?

GBD原始数据中的国家名称是“官方全称”,例如:

  • “People’s Republic of China”
  • “United Kingdom of Great Britain and Northern Ireland”
  • “Islamic Republic of Iran”

这些冗长的名称在数据分析和可视化时非常不便。GlobalBurdenR的

gbd_standardize_location_names()
函数会自动将其转换为:

  • “China”
  • “United Kingdom”
  • “Iran (Islamic Republic of)”

3.2 一行代码规范化

data <- gbd_standardize_location_names(data)

运行结果(部分展示):

=== 第3步: 标准化国家名称 ===
以下位置名称已被标准化:
Location ID | 原名称 -> 标准名称
----------------------------------------
          6 | People's Republic of China -> China
         95 | United Kingdom of Great Britain and Northern Ireland -> United Kingdom
        142 | Islamic Republic of Iran -> Iran (Islamic Republic of)
         80 | French Republic -> France
         81 | Federal Republic of Germany -> Germany
         82 | Hellenic Republic -> Greece
         92 | Kingdom of Spain -> Spain
         93 | Kingdom of Sweden -> Sweden
         86 | Republic of Italy -> Italy
        141 | Arab Republic of Egypt -> Egypt
        160 | Islamic Republic of Afghanistan -> Afghanistan
        163 | Republic of India -> India
        ... (共标准化152个国家名称)

国家名称标准化完成!
- 唯一地区数: 204
- 地区示例: American Samoa, Andorra, Afghanistan, Angola, Albania, ...

智能映射

: 函数内建了204个国家/地区的标准名称对照表,覆盖GBD数据库的所有地理单位!

? 第四步: 数据质量检验

4.1 为何要进行质量检验?
原始数据可能存在以下问题: 零值/负值(不符合理论逻辑) 缺失值(干扰统计分析) 异常值(极端数据点) 重复记录
4.2 利用debug_gbd_data_check()检验
data <- debug_gbd_data_check(data)
函数作用:
  • ? 检验零值和负值
  • ? 探测缺失值(NA)
  • ? 确定重复行
  • ? 核实数据完整性
  • ? 自动解决常见问题

???? 注意 : 此函数在检测到问题时会生成详尽报告,并在可行情况下自动修复 ???? 第五步: 存储处理后的数据

5.1 存储为CSV文件
write.csv(data, '2023TB.csv', row.names=FALSE)
文件详情:

数据已保存到: 2023TB.csv
文件大小: 39.05 MB
总行数: 312018

5.2 数据架构(处理后)
# 查看处理后的数据列名
names(data)
# [1] "measure"  "location" "sex"      "age"      "cause"
# [6] "metric"   "year"     "val"      "upper"    "lower"
# 查看前5行
head(data, 5)
输出示例:

measure       location  sex         age        cause metric year      val    upper    lower
1  Deaths American Samoa Both    <5 years Tuberculosis Number 1990 0.046835 0.069716 0.028074
2  Deaths American Samoa Both    <5 years Tuberculosis   Rate 1990 0.611558 0.910336 0.366585
3  Deaths American Samoa Both   5-9 years Tuberculosis Number 1990 0.017863 0.026740 0.011162
4  Deaths American Samoa Both   5-9 years Tuberculosis   Rate 1990 0.292182 0.437387 0.182578
5  Deaths American Samoa Both 10-14 years Tuberculosis Number 1990 0.019491 0.026934 0.012427

???? 列名对比 : 原始16列(含ID列) → 标准11列(仅保留分析必要列)

measure_name
measure
location_name
location

???? 第六步: 创建三线表

6.1 何为三线表?
三线表是学术文章中最常使用的表格形式,其特征为:
  • ? 只有3条水平线(顶部、标题行下方、底部)
  • ? 没有垂直线
  • ? 数据对比清晰(1990 vs 2023)
  • ? 包含置信区间
  • ? 符合多数期刊的要求
6.2 一键创建三线表
# 定义需展示的区域
location <- c("Global",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa", "China", 'Egypt')
# 定义表格中区域的显示顺序
order <- c("Overall", "Female", "Male",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa",
"China", 'Egypt')
# 生成三线表
t2 <- GBD_table(
input_path = "2023TB.csv",
measure = "Deaths",
locations = location,
regions_order = order,
year1 = 1990,
year2 = 2023,
output_path = '222.docx'
)
6.3 参数解释
参数说明示例
input_path
输入数据文件路径
"2023TB.csv"
measure
测量指标
"Deaths"
,
"Incidence"
,
"Prevalence"
locations
需展示的区域列表
c("Global", "China", "USA")
,
regions_order
c("Overall", "Female", "Male", ...)
表格中区域的显示顺序
year1
1990
起始年份
year2
2023
结束年份
output_path
'table1.docx'
输出Word文件路径
6.4 生成的表格预览
print(t2)
实际生成的三线表内容:
地区/分组1990年死亡数 [95% UI]1990年死亡率 (每10万人) [95% UI]2023年死亡数 [95% UI]2023年死亡率 (每10万人) [95% UI]EAPC (%) [95% CI]
Overall18866.12 [14417.44-23895.53]42.59 [32.43-54.2]10105.26 [8065.55-12447.22]11.65 [9.24-14.41]-4.0 [-4.14 to -3.85]
性别
Female7476.69 [4014.1-10760.18]31.65 [17.12-45.59]3883.76 [2631.7-5484.06]8.75 [5.89-12.49]-4.03 [-4.15 to -3.91]
Male11389.43 [8753.01-15743.97]55.95 [43.1-77.37]6221.5 [4776.78-7994.83]14.87 [11.38-19.21]

-4.04 [-4.22 to -3.87]

Socio-demographic index

High-middle SDI

2561.99 [2049.43-3092.93]

32.23 [25.61-39.4]

1343.96 [1122.71-1568.82]

6.98 [5.83-8.14]

-4.71 [-4.79 to -4.63]

Middle SDI

2283.75 [1710.78-3045.51]

61.13 [45.6-81.57]

1174.86 [939.21-1408.92]

13.27 [10.52-15.89]

-4.47 [-4.64 to -4.3]

Low-middle SDI

5516.74 [4097.48-7333.06]

121.07 [89.95-163.9]

2617.25 [2090.62-3298.4]

27.15 [21.6-34.32]

-4.48 [-4.67 to -4.29]

Low SDI

7012.23 [5025.32-9402.32]

150.71 [106.2-199.87]

4502.91 [3230.17-6023.12]

41.55 [30.17-54.55]

-3.93 [-4.11 to -3.76]

Region

Tropical Latin America

84.39 [77.6-92.15]

7.52 [6.87-8.22]

75.47 [71.69-79.57]

2.91 [2.77-3.07]

-3.8 [-4.15 to -3.45]

Eastern Sub-Saharan Africa

1847.22 [1319.18-2476.82]

172.42 [123.04-226.48]

1171.78 [808.14-1542.87]

47.43 [33-62.25]

-4.11 [-4.32 to -3.9]

China

1746.28 [1280.14-2364.2]

19.5 [14.09-26.33]

247.52 [183.6-346.22]

1.17 [0.86-1.64]

-8.61 [-8.86 to -8.36]

Egypt

21.69 [17.11-26.83]

6.71 [5.12-9.17]

7.5 [5.54-9.78]

1.16 [0.85-1.57]

-4.41 [-4.72 to -4.1]

表格解读

: Overall行 : 全球总体结核病死亡数从1990年的18,866例下降到2023年的10,105例, 年均减少4.0%

性别差异 : 男性死亡率(14.87/10万)显著高于女性(8.75/10万) 两性的年均变化率相近(约-4%)

SDI分层 : Low SDI 国家死亡率最高(41.55/10万),但下降速度最慢(-3.93%) High-middle SDI 国家下降速度最快(-4.71%)

中国表现突出 : 死亡数从1,746例降至248例,降幅达到 85.8% EAPC为**-8.61%**,远超全球平均水平(-4.0%)

死亡率从19.5/10万降至1.17/10万

EAPC (Estimated Annual Percentage Change) : 负值表明下降趋势 绝对值越大,下降速度越快

注 : UI = Uncertainty Interval(不确定性区间),相当于95%置信区间 CI = Confidence Interval(置信区间)

所有数值已自动格式化,保留两位小数

6.5 三线表的格式特点

GlobalBurdenR生成的三线表符合国际期刊标准 :

格式要素 说明 示例

表格线条 仅3条横线(顶线、表头线、底线),无竖线 符合APA、AMA、Lancet等期刊要求

数据分层 按性别、SDI、地区分层展示 Overall → Sex → SDI → Region

置信区间 方括号表示95% UI/CI 18866.12 [14417.44-23895.53]

小数精度 死亡数保留两位,死亡率保留两位 自动格式化

分组标识 使用粗体标识分组标题 Overall , Sex , Region

EAPC展示 包含点估计和95%置信区间 -4.0 [-4.14 to -3.85]

表格列说明 :

列1 : 地区/分组名称

列2 : 1990年死亡数(绝对数) [95% UI]

列3 : 1990年年龄标准化死亡率(每10万人) [95% UI]

列4 : 2023年死亡数(绝对数) [95% UI]

列5 : 2023年年龄标准化死亡率(每10万人) [95% UI]

列6 : EAPC及其95%置信区间

6.6 输出文件

三线表生成完成!
- 输出文件: 222.docx
- 文件大小: 12.1 KB
- 表格行数: 14
- 表格列数: 6

打开

222.docx

文件,你将看到 :

? 标准三线表格式(仅3条横线)

? 1990年与2023年数据对比

? 按性别、SDI、地区分层展示

? 包含95%不确定性区间和置信区间

? 自动计算EAPC及其统计显著性

? 可直接插入论文,无需手工调整!

Word表格的优势 :

  • 可在Word中直接编辑字体、色彩
  • 可复制粘贴至其他文档
  • 可根据期刊需求调整样式
  • 支持.docx格式,兼容性良好
  • 完整代码汇总

# =====================================
# GlobalBurdenR包第一章完整示例代码
# 功能:数据读取、标准化、三线表生成
# =====================================
# 步骤1:加载包
setwd('/Users/yuzheng/Documents/GBD数据/2023SDI和pop数据')
library(GlobalBurdenR)
library_required_packages()
# 步骤2:读取并合并2023数据
data <- unzip_and_merge_csv_files_vroom_progress('2023数据/')
# 步骤3:标准化国家名称
data <- gbd_standardize_location_names(data)
# 步骤4:数据质量检查
data <- debug_gbd_data_check(data)
# 步骤5:保存处理后数据
write.csv(data, '2023TB.csv', row.names=FALSE)
# 步骤6:生成三线表
location <- c("Global",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa", "China", 'Egypt')
order <- c("Overall", "Female", "Male",
"High-middle SDI", "Middle SDI",
"Low-middle SDI", "Low SDI",
"South-East Asia Region", "Tropical Latin America",
"Eastern Sub-Saharan Africa",
"China", 'Egypt')
t2 <- GBD_table(
input_path = "2023TB.csv",
measure = "Deaths",
locations = location,
regions_order = order,
year1 = 1990,
year2 = 2023,
output_path = '222.docx'
)
print(t2)
运行时间
: 大约30-60秒(依据数据量和计算机性能)
    

核心函数总结

函数名 功能 输入 输出
unzip_and_merge_csv_files_vroom_progress()
批量读取并合并ZIP/CSV文件 目录路径 合并后的数据框
gbd_standardize_location_names()
标准化国家名称 数据框 标准化后的数据框
debug_gbd_data_check()
数据质量检查 数据框 检查并修复后的数据框
GBD_table()
生成三线表 CSV文件路径 Word文档 + 数据框

知识拓展

GBD数据的标准结构
GlobalBurdenR处理后的数据包含以下核心列:

列名 说明 示例值
measure
测量指标 Deaths, Incidence, Prevalence, DALYs
location
地理位置 Global, China, USA
sex
性别 Male, Female, Both
age
年龄组 <5 years, 15-19 years, All ages
cause
疾病/病因 Tuberculosis, HIV/AIDS
metric
指标类型 Number(绝对数), Rate(率)
year
年份 1990-2023
val
点估计值 数值
upper
95% UI上限 数值
lower
95% UI下限 数值

SDI分层说明
SDI (Socio-demographic Index): 是社会人口学指数,GBD研究将全球国家分为5个SDI层级:

  • High SDI: 高社会人口学指数(如美国、日本、西欧国家)
  • High-middle SDI: 中高SDI(如中国、巴西、俄罗斯)
  • Middle SDI: 中等SDI(如印度、印尼、菲律宾)
  • Low-middle SDI: 中低SDI(如尼日利亚、巴基斯坦、孟加拉国)
  • Low SDI: 低SDI(如多数撒哈拉以南非洲国家)

? 常见问题解答(FAQ)

Q1: 为何需要标准化国家名称?
A: 简化数据处理: 短名称更利于筛选和分组;
可视化友好: 图表标签不会太长;
跨数据集匹配: 便于与其他数据源(如SDI数据)合并。
Q2: 如果我的数据不是ZIP格式,而是普通CSV,如何处理?
A: 使用
merge_csv_files_vroom_progress()

函数:

data <- merge_csv_files_vroom_progress('CSV文件路径/')

Q3: 三线表能够自定义格式吗?

A: 可以!

GBD_table()

函数提供多种自定义设置,比如:

选择不同的评估指标(

measure
)

自定义年份比较(

year1
,
year2
)

调整区域排序(

regions_order
)

详细参数请查阅函数文档:

?GBD_table

Q4: 生成的Word表格能直接用于论文吗?

A: 可以!生成的表格满足以下标准:

? 标准化三线表格式

? 包含95%不确定区间(UI)

? 数据精确度适宜(自动四舍五入)

? 满足JAMA、Lancet等顶级期刊的要求

不过建议依据目标期刊的具体需求微调格式(如字体、字号等)。

Q5: 数据量过大,内存不足怎么办?

A: GlobalBurdenR已经进行了内存优化,但如果数据量特别庞大(例如全球所有疾病),可以考虑:

分批加载: 先按疾病或区域分组下载

使用筛选: 在

gbd_filter()
中预先筛选所需数据

增加内存: 调整R的内存限制

memory.limit(size=16000) # 设置为16GB

???? 下期预告

GlobalBurdenR包系列教程(二): 数据筛选与EAPC计算

下篇将涵盖:

? 使用

gbd_filter()
进行复杂条件筛选

? 计算EAPC(估计年度百分比变化)

? 生成EAPC世界地图和条形图

? 识别疾病负担的变化趋势

???? 本文资源

?

完整代码: 见"完整代码汇总"部分

?

示例数据: GBD 2023结核病数据(可从IHME官网下载)

?

输出示例:

2023TB.csv
(39MB),
222.docx
(12KB)

???? 联系与反馈

若您在使用过程中遇到问题,或有任何功能建议,欢迎通过以下途径联系我们:

???? Email: 1007489299@qq.com

???? 微信公众号留言

???? GitHub Issues(如果包已开源)

?

总结

本文利用真实的GBD 2023结核病数据,展示了GlobalBurdenR包的主要功能:

?

数据读取: 一行代码即可读取并合并多个ZIP/CSV文件

?

名称标准化: 自动将152个国家的官方全称转换为标准名称

?

质量检查: 自动检测并修复数据问题

?

三线表生成: 一键生成可用于发表的Word表格

核心理念: 简化、加速并确保GBD数据分析的可重复性!

下一篇见!

????

GlobalBurdenR v3.0.0 | 让GBD数据分析更简单

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Burden Global lobal 数据读取 三线表

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 05:00