r - 如何生成对应多列的变量?
问题描述
我有一个包含 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”。如果同一位患者发生不止一次出血,我想使用过去最远的日期。如果没有出血,我想在随访时使用日期。到目前为止,我无法想出一段工作代码......非常感谢任何帮助!
解决方案
这是一个不太美观但应该可以完成的解决方案。
我认为您的数据可能会在事件和日期之间叠加。因此,我创建了一个新事件(跟进),我们有四个事件的“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))
推荐阅读
- isabelle - Sledgehammer 如何将 lambda 抽象转换为 ATP?
- java - 我可以在我的索引器客户端中使用 solrj 驱动程序 8.5.0 而不登录 log4j2 吗?
- oracle - 在非常大的 IN 子句上获取 ORA-00913
- scroll - 在 mosh 中,我如何在终端中回滚并在 emacs、less 等中使用鼠标
- c# - 如何动态加载和卸载(重新加载).dll 程序集
- python - Python创建一个不重复的数字序列
- android - 如何在 xamarin 上获取蓝牙 a2dp 连接事件?
- prometheus - Prometheus 无法将数据写入 postgreSQL
- python - 在 django 网站上处理大文件的最佳方法
- android - React Native Firebase 在设备上给出错误但在模拟器上工作