大家好,我是王路情博士,一个坚持早上5点起床和使用R语言的数据科研工作者。
我已经完成了NHANES小课的前三课,感谢大家的关注、喜欢和支持。
通过这个NHANES小课,我认识了新朋友,学习了新知识,发现了新问题,得到了新启示。
感恩遇见,共赢未来。
“我用nhanesA包获取NHANES数据库”是我的NHANES小课第四课。
前面三课,告诉了大家,我是用R语言和RStudio做NHANES数据库的分析和挖掘工作。
关于
1)R语言是什么?
2)R语言软件如何安装?
3)RStudio又是什么?
4)RStudio软件又如何安装和使用?
5)R语言如何学习和进阶?
等等
若是有很多朋友,在这方面有问题,我就会考虑写一个《R语言小课》合集。
这一课,我分享获取NHANES数据库的方法。
关于如何获取NHANES数据库,一路走来,我尝试过多种方式,逐一说明如下:
方式一:直接从官网下载数据集到本地,再通过R语言导入数据集处理
方式二:通过编写代码线上下载和整理(有可能因为网络问题,不稳定)
方式三:把别人下载好的数据集做分类管理,相当于在本地构建了一个NHANES数据库,后续导入就好
方式四:尝试用一些NHANES数据库相关的包,加载包后,使用包里面函数获取NHANES数据库。
以上方式尝试过后, 我喜欢用nhanesA包做NHANES数据库获取的工作。
换句话说,在NHANES数据库分析和挖掘项目,肯定能够找到用了 nhanesA包的R语言脚本。
敲黑板了,请朋友们重视:
1)nhanesA包管理和常用函数
2)使用nhanesA包整理一份数据表的元数据(数据的数据或者里面字段的含义说明表)
3)nhanesA包获取感兴趣的数据集
4)nhanesA包的查找功能介绍
一、nhanesA包管理
我使用 pacman包做包管理工作,包括所需要包的安装和加载,一条语句就搞定。
library( 'pacman')
p_load( 'nhanesA') # 获取NHANES数据库包
p_load( 'tidyverse') # 数据科学工具集
p_load( 'survey') # 权重分析工具集
p_load( 'openxlsx') # Excel读写工具集
我用 R语言的帮助文档,指导我高效学习 nhanesA包的学习和应用
# 查看nhanesA的帮助文档
help( package='nhanesA')
如下图:
红色方框圈出来的内容,是我重点学习的内容。
包括:
1)包的实用手册和相关文档(里面提供了两份手册,值得深入学习和实践一把)
2)获取NHANES数据库数据表结果,并返回数据框格式的nahnes函数
3)用于查询相关系列的函数集(nhanesSearch/nhanesSearchTableNames/nhanesSearchVarName)
4)查看数据表和变量集信息函数(nhanesTables/nhanesTableVars)
关于如何学习和使用这些函数,我的学习方法。
1)首先,阅读包的实用手册和参考文档
2)其次,对于感兴趣的函数,点击进入,做函数的学习,从 函数的定义、参数设置、返回结果和应用示例,这些方面学习和练习。
以 nhanesTables函数为例
进入这个函数后,如下图
对于这个图,我按着标记,逐一解读和学习。
1)函数功能描述,返回数据模块下的数据表情况
2)函数的定义,包括函数名和参数,以及参数的默认值设置
3)参数说明,比方说,第一个参数,data_group,对于NHANES可以获取的5个公开数据模块,分别是人口统计学、饮食、检查、实验室、问卷,在nhanesA包依次实用( DEMO、DIET、EXAM、LAB和Q)来表示。
4)函数的功能详细介绍
5)函数的返回值说明
6)函数使用是示例
依次类推,其它的函数也可以按着这个方法学习和使用。
二、nhanesA包使用
2.1 构建数据表元数据
所谓元数据,是数据的数据。
或者说
就是对数据模块下各个表的介绍数据,以及对各个表下各个字段含义详细的数据。
我这里,以 2013年这个周期为例
通过nhanesA包,整理出两份元数据表,并且保存为xlxs格式。
一份是,数据块各个数据表的元数据
代码片段
data_group<-c( 'DEMO', 'DIET', 'EXAM', 'LAB', 'Q')
table_df<-list
for( sub_dataindata_group) {
print( sub_data)
# 第一步:获取各个数据模块对应的表
tables<-nhanesTables( sub_data, 2013)
names( tables) <-c( "TableName", "TableDeion")
tables[[ "DataGroup"]] <-sub_data
table_df[[ sub_data]] <-tables
}
combined_df<-do.call( rbind, table_df)
dim( combined_df)
# 数据模块的表数据保存
# 保存为Excel文件
write.xlsx( combined_df, './output/1data_group_tables.xlsx')
五大数据模块,包括 183张表。
这份元数据,部分结果如下图:
另一份是,数据块各个数据表下的各个数据字段的元数据
代码片段
data_group<-c( 'DEMO', 'DIET', 'EXAM', 'LAB', 'Q')
vars_df<-list
for( sub_dataindata_group) {
print( sub_data)
# 第一步:获取各个数据模块对应的表
tables<-nhanesTables( sub_data, 2013)
names( tables) <-c( "TableName", "TableDeion")
table_name<-tables$TableName
for( sub_tableintable_name) {
# 第二步:获取各个数据表对应的变量信息
print( sub_table)
vars<-nhanesTableVars( sub_data, sub_table)
names( vars) <-c( "VariableName", "VariableDeion")
print( length( vars$VariableName))
name_tmp<-paste( sub_data, '_', sub_table)
vars[[ "DataGroupTable"]] <-name_tmp
vars_df[[ name_tmp]] <-vars
}
}
combined_vars_df<-do.call( rbind, vars_df)
dim( combined_vars_df)
# 数据模块的表的变量名数据保存
# 保存为Excel文件
write.xlsx( combined_vars_df, './output/2data_group_tables_vars.xlsx')
五大数据模块,183张表,包括7291个变量集,各个表之间通过变量: SEQN(Respondent sequence number)做关联,实现纵向扩展,形成一张大宽表,可以使用 tidyverse包里面的 full_join函数做全连接操作,得到完整数据后,在按着科研选题,做纳排处理。
这份元数据,部分结果如下图:
这两份Excel数据,若是需要的朋友,可以添加我的微信获取。
2.2 获取感兴趣数据集
确定科研选题后,先选择一个周期的数据,使用 nhanes函数获取感兴趣的数据集。
我的工作流,按着如下步骤:
第一步:确定科研选题。
关于科研选题这块,可以读我的NHANES小课第三课 。
第二步:选定一个周期数据
第三步:使用nhanes函数获取与课题相关的数据表数据
第四步:变量取值的映射处理
第五步:选择合适的变量集
第六步:各个数据表的拼接,全连接操作
第七步:在其他周期里面,继续执行2~6步
第八步:横向拼接数据集
第三步和第四步,使用nhanesA包的nhanes函数、nhanesTranslate函数
第五步到第六步,使用tidyverse包的select函数、full_join函数等其它函数集。
截止到现在,科研选题的数据准备工作,已经完成,后续工作就是按着科研任务,依次做
1)数据纳排;
2)数据处理;
3)数据分析;
4)数据结果解读和整理。
nhanes函数获取数据,举例说明。
下载和获取DEMO_D和BMX_D,它是NHANES2005-2006这个周期的数据集,分别来自人口统计数据模块和检查数据模块(EXAM)。
并且对两个数据集做全连接,选择感兴趣的列,形成新的数据子集,做数据检视操作。
代码片段
demo_d<-nhanes( 'DEMO_D')
bmx_d<-nhanes( 'BMX_D')
# 全连接拼接
demo_bmx<-demo_d%>%
full_join( bmx_d)
# 选择感兴趣的列
demo_bmx1<-demo_bmx%>%
select(
SEQN, RIAGENDR, BMXHT, BMXWT, BMXLEG, BMXCALF, BMXTHICR
)
# 数据检视
demo_bmx1%>%
slice_head( n=10)
数据结果
使用nhanes函数获取数据时,默认把一些类型变量的字段映射成变量codebook里面的取值。若是需要自定义和灵活选择所需变量做映射,可以按着下面步骤进行:
1)nhanes获取数据时,参数translate 由默认值TRUE设定为FALSE
2)选取表格里面需要映射的变量集
3)使用nhanesTranslate对指定的变量集做映射处理。
代码片段
bpx_d<-nhanes( 'BPX_D', translate=FALSE)
head( bpx_d[, 6:11])
bpx_d_vars<-names( bpx_d)
bpx_d<-nhanesTranslate( 'BPX_D', bpx_d_vars, data=bpx_d)
head( bpx_d[, 6:11])
映射前的数据结果
映射后的数据结果
有时候,当我们的科研选题需要从同一个周期下很多表里面获取数据时。
方式一,就是把同一周期下目标表,先确定好,然后使用上面的方法逐一下载和保存这些包的数据。
方式二,使用 lapply函数,批量下载目标的数据集,并且把它存到一个列表数据结构,然后把它转换为数据框
在这里,我演示下方式二的实现。
# 使用lapply函数
exam2007names <- nhanesTables('EXAM', 2007, namesonly=TRUE)
# 需要用到BMX_E/BPX_E两张表里面的数据
target_tables <- c("BMX_E", "BPX_E")
exam2007tables <- lapply(target_tables, nhanes)
length(exam2007tables)
names(exam2007tables) <- target_tables
# 列表数据结构转换为数据框
bmx_e <- exam2007tables$BMX_E
bpx_e <- exam2007tables$BPX_E
dim(bmx_e)
dim(bpx_e)
# 数据拼接
exam_2007_df <- bmx_e %>%
full_join(bpx_e)
dim(exam_2007_df)
2.3 查找功能使用
我在NHANES小课第二课,“带你全面认识NHANES数据库 ”,介绍了官网的查找功能以及如何使用,并且以久坐这个关键词做了示范。
我们通过NHANES官网的查询功能,基于关键词获得目标表后,然后就可以使用前面获取NHANES数据库的方法,获取和整理数据集就好了。
在具体操作中,建议大家,针对科研选题,整理 一份数据清单。
这个数据清单,包括:
1)科研选题标题
2)研究对象
3)自变量和因变量
4)协变量
5)数据模块
6)数据目标表
7)数据周期
带着这份数据清单,开展后续的工作。
nhanesA包,也提供了3个与查找相关的函数,常用的函数是nhanesSearch。
这个函数的工作原理:
使用者输入搜索词,与 变量完整描述进行匹配,并检索匹配变量列表。
搜索的设置逻辑:
1)可以提供匹配搜索词(变量描述必须包含其中一个词)
2)排他性搜索词(变量描述不得包含任何排他性词)
3)搜索可以限制在特定的调查范围以及特定的数据组
关于这个函数的使用代码示例
bladder<-nhanesSearch( "bladder",
ystart=2001,
ystop=2002,
nchar=50)
# 或者其他用法
nhanesSearch( "urin",
ignore.case=TRUE,
ystart=2001,
ystop=2002,
namesonly=TRUE)
nhanesSearch( "urin",
exclude_terms="during",
ignore.case=TRUE,
ystart=2001,
ystop=2002,
namesonly=TRUE)
nhanesSearch( c( "urin", "Urin"),
exclude_terms=c( "During", "eaten during", "do during"),
data_group=c( 'EXAM', 'LAB'),
ignore.case=TRUE,
ystart=2001,
ystop=2002,
namesonly=TRUE
)
nhanesSearch( c( "tooth", "teeth"),
ystart=2001,
ystop=2002,
ignore.case=TRUE)
nhanesSearch( "^Tooth",
ystart=2001,
ystop=2002)
我的一个小技巧,在做查询功能的时候, 先确定一个时间窗口,让检索更快,找到目标表后,再拓展。
总之, 我在做NHANES数据库分析和挖掘时,我用nhanesA包做数据获取工作。
感谢这个包的作者们。
一方面,使用这些包的提供的函数集,另一方面,使用R语言其他知识和技能。两者结合起来,就可以用R语言有效地完成科研选题下NHANES数据库获取工作,为后续的数据整理和分析,做好了数据准备。
关于这一课的R语言知识和技能,你有任何问题,可以添加我的微信,讨论和交流。
若是你在使用代码的过程中,出现问题或者有新的想法,不知道如何编写代码,也可以联系我,大家讨论和交流。
群体的智慧,可以发挥1+1 >> 2的效果。
《NHAES小课》合集:
1NHANES小课|一起来挖NHANES数据库
2NHANES小课|带你全面认识NHANES数据库
3NHANES小课|NHANES数据库科研选题一二三
若是你有什么想和我说的,欢迎扫码添加我的微信,备注: NHANES。感恩遇见,共赢未来。
据统计,天南地北R语言学习者都关注这个公众号
责任编辑: