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	
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐