首页 > 解决方案 > 如何生成对应多列的变量?

问题描述

我有一个包含 10 位患者的数据集,如下所示:

df = data.frame(id=c(1:10),
               event1=sample(1:4, 10, replace=T),
               date1=Sys.Date() - sample(100:500, 10, replace=T), 
               event2=sample(1:4, 10, replace=T),
               date2=Sys.Date() - sample(100:500, 10, replace=T), 
               event3=sample(1:4, 10, replace=T),
               date3=Sys.Date() - sample(100:500, 10, replace=T),
               follow_up=Sys.Date() - sample(10:100, 10, replace=T)) 

每个患者都有多个事件,每个事件都有其对应的日期。如果事件和日期没有发生,它也可能是 NA。随访日期是检查患者事件的最后日期。

我为结果出血创建了一个变量(在这种情况下,如果事件 == 2),如下所示:

all_vars_quo <- quo(c(event1, event2, event3))

df %>% rowwise() %>% 
  mutate(bleeding_no = sum(!!all_vars_quo==2, na.rm=TRUE)) %>% 
  mutate(bleeding = if_else(bleeding_no>0,1,0))

现在,我想添加一个带有相应出血日期的附加变量“bleeding_date”。如果同一位患者发生不止一次出血,我想使用过去最远的日期。如果没有出血,我想在随访时使用日期。到目前为止,我无法想出一段工作代码......非常感谢任何帮助!

标签: rdateif-statementdplyrconditional-statements

解决方案


这是一个不太美观但应该可以完成的解决方案。

我认为您的数据可能会在事件和日期之间叠加。因此,我创建了一个新事件(跟进),我们有四个事件的“dfevent”(一个是虚拟的)和四个日期的 dfdate。

我们只保留与 event==2 对应的日期,然后,对于每一行,我们选择最小的日期。

df=df %>% rowwise() %>% 
  mutate(bleeding_no = sum(!!all_vars_quo==2, na.rm=TRUE)) %>% 
  mutate(bleeding = if_else(bleeding_no>0,1,0))%>%
  mutate(eventFU=2)


dfevent=df[,c(2,4,6,11)]
dfdate=df[,c(3,5,7,8)]

dfdatef=dfdate

dfdatef[!dfevent==2]=NA

df=cbind(df,date=apply(dfdatef,1,min,na.rm=TRUE))

推荐阅读