В настоящее время я работаю над сценарием, который создает блок/диапазон кода МКБ-10 на основе данного кода МКБ-10. Я добился некоторого прогресса для тех, у кого есть четыре или более символов, но если данный код ICD-10 является трехзначным кодом, мой код регулярного выражения не работает должным образом. Похоже, проблема связана с периодом между буквенно-цифровыми кодами. Вот мой текущий код:
icd10 <- data.frame(
stringsAsFactors = FALSE,
check.names = FALSE,
`icd10_codes` = c("A00-A09.9","A00.1","A01.2","A00-A09.9","A04.4",
"A00","A05","A00-A09.9","A03.2")) %>%
# Identify the ICD-10 Block Codes
mutate(icdrange = case_when(
grepl('^([a-zA-Z0-9]*-[a-zA-Z0-9]*)+$', icd10_codes) ~ icd10_codes, # if ICD-10 code is already a block code, use it as the ICD-10 range
grepl('^([aA][0][0-9][.]*[0-9][0-9]*)+$', icd10_codes) ~ "A00-A09.9",
grepl('^([aA][1][5-9][.]*[0-9][0-9]*)+$', icd10_codes) ~ "A15.0-A19.9",
grepl('^([aA][2][7][.]*[0-9][0-9]*)+$', icd10_codes) ~ "A27.0-A27.9",
grepl('^([aA][3-4][0-9][.]*[0-9][0-9]*)+$', icd10_codes) ~ "A30-A49.9",
grepl('^([aA][8][0-9][.]*[0-9][0-9]*)+$', icd10_codes) ~ "A80-A89"
))
A01.1 следует назначить A00-A09.9 (в настоящее время это работает) A00 следует назначить A00-A09.9 (в настоящее время не работает)
Надеюсь, вы сможете помочь. Спасибо!
A01.1 следует назначить A00-A09.9 (в настоящее время это работает) A00 должен быть назначен A00-A09.9 (в настоящее время не работает)
Это утверждение будет исправлено следующим регулярным выражением. Хотя цель вашего бизнеса не совсем ясна, поэтому я оставил последний +
в этом регулярном выражении, как вы и хотели.
^([aA][0][0-9]([.][0-9])?[0-9]?)+$
Объяснение:
([.][0-9])?
гарантирует, что если .
существует, за ним следует 1 цифра.
Финальный ?
гарантирует, что .digit
не является обязательным.[0-9]?
— гарантирует, что последняя цифра также является необязательной.*
на ?
, потому что не совсем понятно, почему вам нужен ноль или больше, если вы хотите оставить это необязательным.В первом случае вы можете использовать ^([a-zA-Z][0-9]{2}-[a-zA-Z][0-9]{2})
.
Для остальных можно использовать ^[aA][0][0-9]([.][0-9])?$
# Identify the ICD-10 Block Codes
df %>% mutate(icdrange = case_when(
# if ICD-10 code is already a block code, use it as the ICD-10 range
grepl('^([a-zA-Z][0-9]{2}-[a-zA-Z][0-9]{2})', icd10_codes) ~ icd10_codes,
grepl('^[aA][0][0-9]([.][0-9])?$', icd10_codes) ~ "A00-A09.9",
grepl('^[aA][1][5-9]([.][0-9])?$', icd10_codes) ~ "A15.0-A19.9",
grepl('^[aA][2][7]([.][0-9])?$', icd10_codes) ~ "A27.0-A27.9",
grepl('^[aA][3-4][0-9]([.][0-9])?$', icd10_codes) ~ "A30-A49.9",
grepl('^[aA][8][0-9]([.][0-9])?$', icd10_codes) ~ "A80-A89"
))
icd10_codes icdrange
1 A00-A09.9 A00-A09.9
2 A00.1 A00-A09.9
3 A01.2 A00-A09.9
4 A00-A09.9 A00-A09.9
5 A04.4 A00-A09.9
6 A00 A00-A09.9
7 A05 A00-A09.9
8 A00-A09.9 A00-A09.9
9 A03.2 A00-A09.9