NHANES数据库实操 数据分析之----------数据清洗
·
1、周期、暴露及结局的选择
按照自己需要研究的,自己去进行选择,并且把XPT数据下载到一个文件夹,或者像这样整理一个表格记录一些自己下载的数据内容,像这样
File Variable Label Type Code Value
DEMO_L RIAGENDR Gender discrete 1 Male
DEMO_L RIAGENDR Gender discrete 2 Female
DEMO_L RIDAGEYR Age continuous
DEMO_L RIDRETH1 Race discrete 1 Mexican American
DEMO_L RIDRETH1 Race discrete 2 Other Hispanic
DEMO_L RIDRETH1 Race discrete 3 Non-Hispanic White
DEMO_L RIDRETH1 Race discrete 4 Non-Hispanic Black
DEMO_L RIDRETH1 Race discrete 5 Other Race - Including Multi-Racial
DEMO_L DMDEDUC2 Education discrete 1 Less than 9th grade
DEMO_L DMDEDUC2 Education discrete 2 9-11th grade (Includes 12th grade with no diploma)
DEMO_L DMDEDUC2 Education discrete 3 High school graduate/GED or equivalent
DEMO_L DMDEDUC2 Education discrete 4 Some college or AA degree
DEMO_L DMDEDUC2 Education discrete 5 College graduate or above
DEMO_L DMDEDUC2 Education discrete 7 Refused
DEMO_L DMDEDUC2 Education discrete 9 Don't Know
2、数据合并
library(tidyverse)
library(haven)
library(nhanesA)
infoRT=read.table("ann.txt", header=T, sep="\t", check.names=F, quote="")
infoVar=c("SEQN", toupper(infoRT$Variable))
infoLabel=c("SEQN", paste0(infoRT$Label, "_", infoRT$Type))
allXPT=list.files(pattern="*.XPT$")
for(file in allXPT){
i=gsub("\\.XPT$", "", file)
xptData=read_xpt(file)
write.csv(xptData, file=paste0("all.", i, ".csv"), row.names=F) }
allFiles=list.files(path = "../00_rawdata", pattern="data.+csv")
allFiles <- paste("../00_rawdata/", allFiles, sep="")
demoFile=grep("DEMO", allFiles, value=T)
allFiles=unique(c(demoFile, allFiles))
#对csv文件进行循环
mergeTab=data.frame()
for(file in allFiles){
#读取输入文件
rt=read.csv(file, header=T, sep=",", check.names=F)
if(file==demoFile){
mergeTab=rt
}else{
mergeTab=merge(mergeTab, rt, by="SEQN", all=T)
}
}
#输出合并后的结果文件
write.csv(mergeTab, file="merge.csv", row.names=F)
3、数据清洗
#读取输入文件
rt=read.csv("../01_merge/merge.csv", header=T, sep=",", check.names=F, row.names=1)
rt <- select(rt, -Smoked_discrete)
keepSample=row.names(rt)
sampleTab=data.frame(Term="All", Number=length(keepSample))
#对暴露因素和结局进行过滤
varVec=grep("exposure|outcome", colnames(rt), value=T)
for(i in varVec){
rt2=rt[!is.na(rt[,i]),,drop=F]
rt3=rt2[!(rt2[,i] %in% delValue),,drop=F]
}
先对结局和暴露因素进行过滤,一般结局和暴露都不能为NA
4、数据插补
library(mice)
#数据补缺
miceData2=mice(rt3, seed=111)
rt=complete(miceData2)
这边用的是mice包对数据进行插补
5、协变量的筛选
delete=c("Don't Know", "Don't know", "Refused","Refused", "Refused","Refused")
varVec2=setdiff(colnames(rt), varVec)
for(i in varVec2){
rt2=rt
if(i=="RIDAGEYR"){rt2=rt2[rt2[,i]>=20,,drop=F]}
rt2=rt2[!is.na(rt2[,i]),,drop=F]
rt3=rt2[!(rt2[,i] %in% delete),,drop=F]
}
#输出结果文件
rt3
write.csv(rt3, file="merge.filter.csv")
其实还有一步,就是把NHANES数据库的列名进行修改,大家自己借助前面自己的注释文件改一下列名就行了,这一步再2、数据合并之后进行
File Variable Label
DEMO_L RIAGENDR Gender
DEMO_L RIAGENDR Gender
DEMO_L RIDAGEYR Age
DEMO_L RIDRETH1 Race
DEMO_L RIDRETH1 Race
DEMO_L RIDRETH1 Race
DEMO_L RIDRETH1 Race
DEMO_L RIDRETH1 Race
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)