—— 要投稿,上万维,轻松学术交流

严正声明

本站非期刊官网,非中介代理,
不向作者收取任何费用!
举报微信:13140028228 冯老师

态度公正、信息求实、投稿自助、使用免费
您的位置:学术资讯 » 正文
  • 阅读: 2023/5/8 17:26:25

    背景

    经过前面几节笔记,学会了基本的数据清洗技巧。现在我们从CHARLS官网下载公开数据来试一下对数据进行清洗。由于CHARLS数据比较规范,以stata数据文件存储,因此我们没有对其进行自动清洗。首先清洗2011年的demographic_backgroundbiomarkers数据,最后对其进行合并。

    2011demographic_background数据清洗

    data<-haven::read_spss("D:/data/demographic_background11.sav")#导入数据

    skimr::skim(data)#预览数据集信息

    names(data)

    data1 = add_labelled_class(data)

    #保留数据集中所需要的变量

    data2<-data1%>%

    select(ID,householdID,communityID,ba002_1,ba004,bb002,bb006,

    bc001,bd001,bd009,bd011,be001,be002,rgender)%>%

    rename(gender=rgender)%>%

    mutate(gender=replace(gender,gender==0,NA))

    数据集里面的数据非常多,只有几个变量是我需要的,因此我保留了其中有用的变量,对rgender变量重新命名。可能是数据录入问题,通过预览数据信息发现gender有一个人录入0,实际上变量分为两类:1男,2女,因此将0替换为缺失。

    biomarker2011年)清洗

    data3<-haven::read_dta("D:/data/biomarkers11.dta")#导入stata数据

    skimr::skim(data)

    data3 = add_labelled_class(data3)

    data4<-data3%>%

    select(ID,householdID,communityID,qa003,

    qa004,qa005,qa007:qa009,qa011:qa013,

    qb002:qb004,qg002,qg003,qi002,ql002,qm002)%>%

    mutate(qa003=replace(qa003,qa003>900,NA),

    qa004=replace(qa004,qa004>900,NA),

    qa005=replace(qa005,qa005>900,NA),

    qa007=replace(qa007,qa007>900,NA),

    qa008=replace(qa008,qa008>900,NA),

    qa009=replace(qa009,qa009>900,NA),

    qa011=replace(qa011,qa011>900,NA),

    qa012=replace(qa012,qa012>900,NA),

    qa013=replace(qa013,qa013>900,NA),

    qb002=replace(qb002,qb002>900,NA),

    qb003=replace(qb003,qb003>900,NA),

    ab004=replace(qb004,qb004>900,NA),

    qg002=replace(qg002,qg002>900,NA),

    qg003=replace(qg003,qg003>900,NA),

    qi002=replace(qi002,qi002>900,NA),

    ql002=replace(ql002,ql002>900,NA),

    qm002=replace(qm002,qm002>900,NA))%>%

    mutate(asystolic=(qa003+qa007+qa011)/3,

    adiastolic=(qa004+qa008+qa012)/3)%>%

    mutate(hypertension=case_when(asystolic>=140~'Yes',

    adiastolic>=90~'Yes',

    asystolic<140~'No',

    adiastolic<90~'No'))

    同样的,添加变量标签后,选择了我所需要的变量。原来的数据集中为了区分不同的缺失原因用993999表示缺失,在此我对其全部转化为缺失数据NA。另外我想了解研究对象的血压情况,在调查中每个人测了三次血压,三次血压的平均值是研究对象的最终血压,根据均值再判断是否为高血压。因此对数据进行了转换生成了新的变量。

    数据合并

    #去掉指示变量标签,否则合并会报错

    data4$ID<-drop_all_labels(data4$ID)

    data2$ID<-drop_all_labels(data2$ID)

    data4$householdID<-drop_all_labels(data4$householdID)

    data2$householdID<-drop_all_labels(data2$householdID)

    data4$communityID<-drop_all_labels(data4$communityID)

    data2$communityID<-drop_all_labels(data2$communityID)

    datajoin<-left_join(data2,data4,by=c('ID',"householdID","communityID"))

    我们要分析高血压患病的一般人口学特征,就需要把两部分数据集连接起来。每个人都有三个ID号作为身份识别码,因为只有部分人有biomarker数据,因此这里用了left_join进行合并。

    注意:在清洗过程中,建议每一步都要检查数据的操作是否正确,以免造成数据错误影响统计分析结果准确性。

    按照往期笔记和本期示例,大家可以从网上找一些公开数据小试牛刀。

    参考文献

    https://epirhandbook.com/en/cleaning-data-and-core-functions.html

    转自:“科研写作成长记”微信公众号

    如有侵权,请联系本站删除!


    浏览(483)
    点赞(0)
    收藏(0)

上一篇:R语言|数据清洗基础1(数据导入和标签)

下一篇:GEB | 全球根系呼吸对土壤总呼吸的贡献