我有参与者正在使用的药物的临床数据,我想创建新的药物类别二元变量(例如,他汀类药物的使用)。为此,我想在多列(药物1、药物2等)中搜索一组字符串(药物名称)来定义新变量。
给定以下代码:
library(tidyverse)
ID <- sprintf("User % d", 1:4)
med1 <- c("rosuvastatin", "ezetimibe", "insulin", "Lipitor")
med2 <- c("niacin", "insulin", "simvastatin", NA)
df <- data.frame(ID, med1, med2)
df <- df%>%
mutate(use_statin = case_when(if_any(starts_with("med"), ~ str_detect(., pattern = "statin")) ~ 1))%>%
mutate(use_statin = case_when(if_any(starts_with("med"), ~ str_detect(., pattern = "Lipitor")) ~ 1))
df$use_statin
我希望use_statin列显示"1NA11",但实际上显示的是"NANANA1"。看起来第二个变异代码行覆盖了第一个。
1条答案
按热度按时间rhfm7lfc1#
我们可以使用一个
if_any
,其中pattern
将其中任何一个匹配为|
(OR
),这样它就不会覆盖第一个匹配在OP的代码中,
use_statin
列是首先使用statin
匹配创建的,然后使用Lipitor
匹配覆盖输出。