哮喘首访数据EDA workflow

· 844 words · 2 minute read

总结对登记库数据进行EDA的workflow。总结主要有几个点:

  • 源数据的清洗;
  • 派生变量的生成;
  • 数据异常的探查;
  • Table one的制作;
  • 可视化。

首先第一步是set up R project: 创建一个新的R项目,包括

  • data folder: 存放原始数据集
  • R folder:存放.R 文件
    • 01helper.R 存放所有的R functions, load library
    • 02data.R 将数据集整理为制表或者作图需要的格式,或是对粗加工的数据集进行进一步的操作,例如生成新的变量,数据类型转换等
    • **output.R 输出想要的图表,tableone, map, line or bar charts etc
  • output folder: 存放图表
    • table: 存放表格
    • figure: 存放图
  • vignette folder: 存放.rmd文件

数据清洗 🔗

这次拿到的数据很多字段是大段文字,不过结构规整,用简单的正则表达式就可以提取对应的信息。主要用到的R包为stringr

library(stringr)
## 肺功能: 先用逗号分隔,再删除掉字符,仅保留数值
x = "FEV1(预计值:2.98L,实测值2.58L,预计百分比86.58%),FVC(预计值:3.43L,实测值2.91L,预计百分比84.84%),FEV1/FVC(预计值:84.02L,实测值88.7L,预计百分比105.57%),MMEF(预计值:3.96L,实测值3.05L,预计百分比77.02%),MEF75(预计值:L,实测值L,预计百分比%),MEF25(预计值:2.08L,实测值1.34L,预计百分比64.42%),MEF25-75(预计值:L,实测值L,预计百分比%),MEF50(预计值:4.36L,实测值3.97L,预计百分比91.06%),PEF(预计值:6.8L,实测值6.3L,预计百分比92.65%);" 

spirometry_f <- function(x) {
  ## simplify	A boolean.
  ## FALSE (the default): returns a list of character vectors.
  ## TRUE: returns a character matrix.
  
  x1 <- str_split(x, ",", simplify = TRUE) 
  
  ## str_replace() replaces the first match; str_replace_all() replaces all matches.
  x2 <- str_replace_all(x1, "[-FEV(:)FVC(FEV/FVC(MMEF(MEF(MEF(MEF(PEF(L%;]", "")

  x3 <- sub(
    "1预计值|实测值|预计百分比|预计值|75预计值|25预计值|2575预计值|50预计值|%", "",
    x2 %>% as.character()
  )

  return(x3)
}

注意如果我们用str_replace_all()的话,应当注意我们不能在pattern里面添加数值,这样文本里面的数值也会被替换掉。