我想根据多个列的评估创建一个新列。我正在搜索 ICD10 代码,并希望当一列或多列中存在适当的模式时创建一个标志。具体来说,我想搜索任何第 5 个字符为 2 的 ICD 代码 T36-T50(例如 T3602)。
这是一个代表。
df <- data.frame (dx1 = c('K5039','T215','C219861','T36002'),
dx2 = c('T38022','X72001','X55124','T36022'),
dx3 = c('X80011','X790122','X55124','T36022'),
pcode = c('R41','R44','R98','R99'),
ecode = c('X79','X81012','X44015','X83012'),
stringsAsFactors = FALSE)
df_new <- df %>%
mutate(injury = case_when(
across(c(dx1:dx3, ecode),
~str_detect(.,regex('(T36|T37|T38|T39|T40|T41|T42|T43|T44|
T45|T46|T47|T48|T49|T50)[:graph:]{1}2.*')) ~ 1,
TRUE ~ 0)))
我收到错误消息
mutate()
中的错误:
ℹ 在争论中:injury = case_when(...)
。
由across()
中的错误引起:
!无法将双面公式 .fns
转换为函数。
我可以使用 if_any 让它部分工作,如下所示:
df_new <- df %>%
mutate(injury = case_when(
if_any(c(dx1:dx3, ecode),
~str_detect(.,regex('X72|X73|X74|X75'))) ~ 1,
TRUE ~ 0))
但是当我添加代码来选择第五个字符时,我收到了类似的错误。
mutate()
中的错误:
ℹ 在争论中:injury = case_when(...)
。
由if_any()
中的错误引起:
!无法将双面公式 .fns
转换为函数。
运行 rlang::last_trace()
查看错误发生的位置。
这就是我希望输出的样子。
我认为这只是一个语法错误,
df_new <- df %>%
mutate(injury = case_when(
if_any(c(dx1:dx3, ecode),
~str_detect(.,regex('(T36|T37|T38|T39|T40|T41|T42|T43|T44|
T45|T46|T47|T48|T49|T50)[:graph:]{1}2.*'))) ~ 1,
TRUE ~ 0))
对我有用。注意“...{1}2.*'”后面的 3 个右括号而不是 2