R 检测是否在间隔时间内给药
我想不出这是怎么回事,尽管我和他很接近。我想检查是否在4小时内给药R 检测是否在间隔时间内给药,r,R,我想不出这是怎么回事,尽管我和他很接近。我想检查是否在4小时内给药 drug start stop 1 A 1 3 2 A 7 10 3 A 11 17 药物A在时间1开始服用,直到时间3为止;然后在时间7再次开始,直到时间10等等 这些是有问题的窗户 数据: 试图解决 这是正确的!第一届政府进入了第一个时间窗口。第二次和第三次管理落入第二次和第三次窗口等,但如何到达 预期的解决方案 正如我所说的,我感觉很接近,但我不知道如何将结果加入
drug start stop
1 A 1 3
2 A 7 10
3 A 11 17
药物A在时间1开始服用,直到时间3为止;然后在时间7再次开始,直到时间10等等
这些是有问题的窗户
数据:
试图解决
这是正确的!第一届政府进入了第一个时间窗口。第二次和第三次管理落入第二次和第三次窗口等,但如何到达
预期的解决方案
正如我所说的,我感觉很接近,但我不知道如何将结果加入到块df…前半部分是@akrun的评论,但扩展到包括先决条件。如果你回来回答我,我很乐意听从你。。。这里只提供更多细节。第二部分是新的,经常被过度关注 数据表 data.table::foverlaps基于重叠/不等式进行连接,而不是只在严格等式上操作的基本合并和dplyr::*\u连接。除了data.table类之外,使用重叠的一个先决条件是时间字段的键控正确 图书馆数据表 设定时间 设置数据块 设定关键点 设置键时间,开始,停止 setkeychunks,t1,t2 连接 +!is.schunks,times,其中=TRUE,mult='first' [1] 1 1 1 1 1 0 该函数实际返回时间中每行对应于块中的哪些行: foverlapschunks,times,哪个=真,mult='first' [1] 123NA sqldf data.table并不是唯一允许这种情况发生的R工具。此解决方案适用于data.frame base、data.table或tbl_df的任何变体 这是: 图书馆SQLDF sqldf 选择c.t1,c.t2, 如果药物为空,则0其他1结束>0为n 从块c 左连接时间t开 t、 在c.t1和c.t2之间启动或在c.t1和c.t2之间停止 或t.start和t.stop之间的c.t1或t.start和t.stop之间的c.t2 按c.t1、c.t2分组 t1 t2 n 1 0 4 1 2 4 8 1 3 8 12 1 4 12 16 1 5 16 20 1 6 20 24 0 我不知道是否有可能减少该连接的逻辑,也不知道它是否会与其他数据发生错误行为
如果你需要在每个时间段内发生的药物数量,我认为你可以使用sumcase当。。。以n结尾。也许+!is.nafsoverlapschunks,times,which=TRUE,mult='first'[1]1 0data.table::foverlapsThanks!今晚我要试试!如果它们不重叠,那么要么开始>t2,要么结束
t1 t2
1 0 4
2 4 8
3 8 12
4 12 16
5 16 20
6 20 24
t1 <- c(0,4,8,12,16,20)
t2 <- t1 + 4
chunks <- data.frame(t1=t1,t2=t2)
drug <- "A"
start <- c(1,7,11)
stop <- c(3,10,17)
times <- data.frame(drug,start,stop)
t1 t2 lsg
1 0 4 1
2 4 8 1
3 8 12 1
4 12 16 1
5 16 20 1
6 20 24 0
test <- function(){
n <- 1
for (row in times){
result <- (times$start[n] > chunks$t1 & times$stop[n] < chunks$t2) | ((times$start[n] > chunks$t1 & times$start[n] < chunks$t2) & (times$stop[n] > chunks$t2 | times$stop[n] < chunks$t2)) | (times$start[n] < chunks$t1 & times$stop[n] > chunks$t1)
n <- n + 1
print(result)
}
}
[1] TRUE FALSE FALSE FALSE FALSE FALSE
[1] FALSE TRUE TRUE FALSE FALSE FALSE
[1] FALSE FALSE TRUE TRUE TRUE FALSE