总结对登记库数据进行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里面添加数值,这样文本里面的数值也会被替换掉。