你的CHARLS数据清洗指南已上线:读数据、改ID、算指标、筛样本,照着代码做就对了!

官方
阅读 368 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(ID, 1, 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(1, 2, 3, 4,5), 1,      # 初中及以下
  ifelse(demo_data$bd001 %in%c( 6, 7), 2,            # 高中和职业学校
    ifelse(demo_data$bd001 %in%c(8, 9, 10, 11), 3,  # 高等教育
      NA                            # 如果有其他不在这些范围内的情况)))
 
harmonized_data <-harmonized_data %>%
  mutate(
    drink =case_when(
      r1drinkn_c ==0~ 0,           # 如果没有喝酒,赋值 0
      r1drinkn_c %in%1:9~ 1,         # 如果喝酒(饮酒次数 在 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 < 60, 1, 0)  # 小于60即为CKD)

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

merged_data <-merged_data %>%
  mutate(hypertension =case_when(
    SBP >=130| DBP >=80| r1hibpe ==1| Hypertension_drugs ==1~ 1,
    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))  #排除极端值

评论列表

发表评论