r - 在多个观测值的移动 48 小时窗口内增加大于 0.3
问题描述
我有一个医院记录数据集,必须检查个别患者,如果“肌酐”在 48 小时内增加 >= 0.3,如果增加 >= 0.3,则在该时间点见证了增加。我的问题是,48 小时间隔必须从记录的开头移动到结尾,因为每个间隔都可能发生增加。
例子:
dat = data.table(
patient_id=c(rep(1,7),rep(2,5)),
measurement=c("1","2","3","4","5","6","7","1","2","3","4","5"),
t=c("2019-01-19 05:00","2019-01-19 14:00","2019-01-20 05:00","2019-01-20 15:00","2019-01-21 03:00","2019-01-22 05:00","2019-01-23 05:00","2019-01-19 05:00","2019-01-19 14:00","2019-01-20 05:00","2019-01-20 15:00","2019-01-21 03:00"),
creatinine=c("0.81","0.90","1.00","1.10","1.20","1.30","1.40","0.81","0.90","1.00","1.10","1.20")
)
所以 48 小时间隔 #1 将是测量 1 到 5。肌酐 >= 0.3 的第一次增加将是从测量 1 到测量 5。但是间隔 #1 也可能没有增加,所以我必须重新检查间隔 #2(测量 2 到 6)用于增加,依此类推。
我正在考虑确定每个间隔的最小值和最大值并获得两者的差异,这样我就可以确定在这个间隔中是否有 >= 0.3 的增加。但是,我不知道如何将 48 小时的间隔从记录的开始转移到结束。
我希望,我的问题很清楚,我非常感谢任何帮助或建议。
解决方案
使用zoo::rollapply
我们可以找到每 5 个 obs 的范围,然后将上式减去下式以检查它是否 >=.3
library(zoo)
library(dplyr)
library(tidyr) #nest and unnest functions
library(lubridate) #ymd and hours function
library(purrr) #map function
dat$t<-ymd_hm(dat$t)
dat$two_days<-dat$t+hours(48)
fun_wdate<-function(df){
#browser()
apply(df,1, function(y){
if(y['measurement']==1){
sum((ymd_hms(y['two_days'])<df$t)=='FALSE')
} else{
sum((ymd_hms(y['two_days'])<df$t[-c(1:y['measurement']-1)])=='FALSE')
}
})
}
dat <- dat %>% group_by(patient_id) %>%
mutate(width=tibble(measurement,t,two_days)%>%fun_wdate)
#Another option
#dat %>% group_by(patient_id) %>%nest() %>% mutate(width=map(data,~fun_wdate(.))) %>% unnest()
dat %>% group_by(patient_id) %>%
mutate(Inc=rollapply(as.numeric(creatinine),width,
FUN=function(x) (if_else (which.min(x)<which.max(x), range(x)[2]-range(x)[1], range(x)[1]-range(x)[2])),
align='left',fill=NA), Flag=if_else(Inc>=0.29999,'Yes','No'))
推荐阅读
- google-sheets - 创建公式以从数据中获取所需的结果
- reactjs - 为什么需要选择两个文件来填充字段?
- java - Tomcat 环境变量设置 (9.0.45)
- primeng - Primeng 多选下拉菜单
- filter - Pandoc Lua过滤器获取当前文档的文件名
- r - 允许用户选择或取消选择要在 plotly/Rshiny 中绘制的线的最佳方法?
- ruby-on-rails - Rails API - 使用 multipart/form-data 格式的 POST 请求提供 ActionController::ParameterMissing
- reactjs - 在机器人框架中,页面未在 ubuntu:18.04 中以无头 chrome 完全加载
- r - RStudio 和 dplyr 的格式化问题,同时捕获输出
- reactjs - 如何添加pdf文件以与打字稿反应?