我正在处理一个临床数据表,其中包含了大约15年期间数十万人的住院病历.我已经清理了我的数据表,现在格式为每集一行,每行都包含该集的日期以及相关的初级和次级诊断(最多20个次级诊断).诊断列包含ICD-10疾病代码字符串.
我有兴趣从这张表中提取大约60种疾病的数据,每种疾病都由数量可变的临床代码组成(例如,哮喘有五个相关的ICD-10代码,焦虑3代码,莱姆病3代码……).我想要编写一个函数来搜索所有的主要和次要诊断列,判断与60个条件相关联的任何字符串,并创建一个二进制是/否输出,如果存在任何相关的ICD代码,则编码为1,否则为0.
我已经弄清楚了如何仅在主诊断列(‘diag_icd10’)上使用muplate内的ifElse中的grepl来完成此操作,但是必须跨很多行代码才能针对所有60个条件获得我想要的结果.下面是一个简短的例子.
anxiety_codes <- c("F400", "F401", "F402")
asthma_codes <- c("J450", "J451", "J458", "J459", "J46X")
chronic_lyme_codes <- c("A692", "G630", "M012")
# Checking primary diagnosis column 'diag_icd10'
data <- data |>
mutate(
anxiety_prim = ifelse(grepl(paste(anxiety_codes, collapse = '|'), diag_icd10), 1, 0),
asthma_prim = ifelse(grepl(paste(asthma_codes, collapse = '|'), diag_icd10), 1, 0),
lymedisease_prim = ifelse(grepl(paste(chronic_lyme_codes, collapse = '|'), diag_icd10), 1, 0))
我的问题是:
- 我想让它成为一个函数,它可以判断所有60个条件,并创建二进制
condition_prim
个变量,而不必编写60多行代码. - 我还想创建一个类似的函数来判断相同的字符串模式,但跨多个辅助诊断列(总共21列...‘SEC_DIAG_0’:‘SEC_DIAG_20’),并返回到
"condition"_sec
变量,无论条件是否存在. - 合并这两个变量,判断主列和副列,并返回到单个
condition
变量,无论条件是否存在.