CHARLS数据库数据清洗实操指南

官方
阅读 154 0 收藏 0 2025-07-06 10:00:00

数据获取与准备

CHARLS数据库注册完成,访问CHARLS官方网站,根据研究目的,确定暴露指标、结局指标和协变量。下载相关问卷、数据集和编码本。

数据导入

▶ 读取各类原始数据文件

demo_data <-read_dta("demographic_background.dta"# 人口学背景数据
health2011_data <-read_dta("health2011.dta"# 2011年健康数据

▶ 由于CHARLS数据库在2011年的ID为11位,后续的年份ID为12位。所以对2011年的ID进行处理 ,以便后续和其他年份的数据合并

demo_data <-demo_data %>%
  mutate(ID=as.character(ID)) %>%
  mutate(ID=paste0(substr(ID1, nchar(ID-1), "0", substr(ID, nchar(ID), nchar(ID))))

▶ 读取其他周期数据

health2020 <-read_dta("health2020.dta"# 2020年健康数据

数据清洗

▶ 根据参考文献对变量进行定义和分类,如文化程度、饮酒状况

demo_data $ education <-
ifelse(demo_data$bd001 %in%c(1234,5), 1,      # 初中及以下
  ifelse(demo_data$bd001 %in%c( 67), 2,            # 高中和职业学校
    ifelse(demo_data$bd001 %in%c(891011), 3,  # 高等教育
      NA                            # 如果有其他不在这些范围内的情况)))
 
harmonized_data <-harmonized_data %>%
  mutate(
    drink =case_when(
      r1drinkn_c ==00,           # 如果没有喝酒,赋值 0
      r1drinkn_c %in%1:91,         # 如果喝酒(饮酒次数 在 1 到 9 之间),赋值 1
      TRUE ~ NA_real_                # 其他情况为 NA ))

▶ 已有变量重命名

harmonized_data <-harmonized_data %>%rename(age =r1agey)  
blood_data <-blood_data %>%rename(TG =newtg)
demo_data <-demo_data %>%rename(gender =rgender)

▶ 衍生变量计算

① 如残余胆固醇的计算:

merged_data <-merged_data %>%mutate(RC =newcho -newhdl -newldl)

② 慢性肾病(CKD)的定义:

merged_data <-merged_data %>%mutate(
CKD =ifelse(eGFR < 6010)  # 小于60即为CKD)

③ 疾病状态定义:查阅文献,高血压的定义为收缩压>=130,或舒张压>=80,或服用降压药,或自我报告患有高血压

merged_data <-merged_data %>%
  mutate(hypertension =case_when(
    SBP >=130| DBP >=80| r1hibpe ==1| Hypertension_drugs ==11,
    TRUE ~ 0))

数据合并

merged_data <-harmonized_data %>%
  left_join(demo_data, by ="ID"%>%
  left_join(blood_data, by ="ID")%>%
  left_join(health2011_data, by ="ID")%>%
  left_join(Sample2020_data, by ="ID")

参与者筛选

df <-df %>%filter(!is.na(age) & age >=45)             #排除年龄小于 45 岁或缺失
df <-df %>%filter(fasting ==1)                      #排除无空腹血样的
df <-df %>%filter(!is.na(RC) & RC > 0& RC <=120)      #排除缺失值
df <-df %>%filter((BMI >=10& BMI <=100) | is.na(BMI))  #排除极端值

评论列表

发表评论