Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 检测是否在间隔时间内给药_R - Fatal编程技术网

R 检测是否在间隔时间内给药

R 检测是否在间隔时间内给药,r,R,我想不出这是怎么回事,尽管我和他很接近。我想检查是否在4小时内给药 drug start stop 1 A 1 3 2 A 7 10 3 A 11 17 药物A在时间1开始服用,直到时间3为止;然后在时间7再次开始,直到时间10等等 这些是有问题的窗户 数据: 试图解决 这是正确的!第一届政府进入了第一个时间窗口。第二次和第三次管理落入第二次和第三次窗口等,但如何到达 预期的解决方案 正如我所说的,我感觉很接近,但我不知道如何将结果加入

我想不出这是怎么回事,尽管我和他很接近。我想检查是否在4小时内给药

  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