如何提取最接近另一列 r 中指定的数据的 10 天间隔

问题描述 投票:0回答:1

我有每天重复测量的数据(如血糖监测仪)。每个人都可以在一段时间内佩戴该设备,因此一个人可以重复测量 1 周,其他人可以重复测量 6 个月。 然后每个人都会有一个带有访问日期的栏。有些人可能会进行多次访问(最多 3 次访问)。

我的数据看起来像这样(抱歉,但我不知道如何生成模拟数据)

datos

id  visit_Date   time                 value
1   2020-03-06   2022-03-23 17:09:00  10    
1   2020-03-06   2022-03-23 17:14:00  11   
1   2020-03-06   2022-03-23 17:19:00  11   
1   2020-03-06   2022-03-23 17:24:00  12   
1   2020-03-06   2022-03-23 17:29:00  11   
2   2018-03-30   2022-03-24 17:22:00  13   
2   2018-03-30   2022-03-24 17:27:00  10
2   2018-03-30   2022-03-24 17:32:00  11
2   2018-03-30   2022-03-24 17:37:00  12

有些人可以在

visit_Date
之前佩戴监测设备,而另一些人只能在
visit_Date
之后佩戴监测设备。我需要的是以 10 天的间隔提取
id, visit_Date
time
value
,但最接近
visit_Date
。理想情况下应该是在访问日期之后,但有些人在访问后佩戴时间不够长,在这种情况下,与
visit_Date
重叠的间隔应该没问题。

到目前为止,我所做的是通过按

id
visit_Date
分组来获取最接近的日期,按降序
time
排列,然后按
time + 10 days
过滤。这是我正在使用的代码:

library(lubridate)

datos %>% 
   dplyr::filter(time >= visit_Date) %>%
   group_by(id, visit_Date) %>%
   arrange(desc(time)) %>%
   dplyr::filter(time < time + 10) %>%
   summarise(min = min(time), max = max(time))

我使用summary来查看过滤后我总共获得了多少天,但是此过滤仅适用于访问日期之后的

time
,并且有些人在访问后10天内没有佩戴该设备。我想我可以对那些少于 10 天的人重复相同的过滤过程,然后合并两个数据集,但我想知道是否还有其他方法可以做到这一点
编辑
我想要的输出将是每个人的所有行,其 10 个间隔天最接近

time <= visit_Date

,理想情况是在

visit_Date

之后,但如果不重叠

visit_Date
。这是一个示例输出(请记住,我的真实日期在
visit_Date
列中每 5 分钟就有一个数据点。
期望的输出(2个人的例子)
time

在此示例中,个人

id1
 在访问日期后佩戴设备的时间不超过 10 天,因此输出应包括访问之前的日期,但仅包含最接近 
> datos id visit_Date time value 1 2020-03-06 2022-02-22 17:09:00 10 1 2020-03-06 2022-02-26 17:09:00 10 1 2020-03-06 2022-02-26 17:14:00 11 1 2020-03-06 2022-02-28 17:19:00 11 1 2020-03-06 2022-03-07 17:24:00 12 1 2020-03-06 2022-03-07 17:29:00 11 2 2018-03-30 2022-03-24 17:22:00 13 2 2018-03-30 2022-03-30 17:27:00 10 2 2018-03-30 2022-04-10 17:32:00 11 2 2018-03-30 2022-04-24 17:37:00 12 2 2018-03-30 2022-04-26 17:37:00 12 # Desired output id visit_Date time value 1 2020-03-06 2022-02-26 17:09:00 10 1 2020-03-06 2022-02-26 17:14:00 11 1 2020-03-06 2022-02-28 17:19:00 11 1 2020-03-06 2022-03-07 17:24:00 12 1 2020-03-06 2022-03-07 17:29:00 11 2 2018-03-30 2022-03-30 17:27:00 10 2 2018-03-30 2022-04-10 17:32:00 11

的 10 天间隔。对于 id2,个人在

visit_Date
之后佩戴设备的时间超过 10 天,我们选择最接近 visit_Date 但晚于或等于
visit_Date
 的 10 天
谢谢
    

对于

id
r lubridate
1个回答
0
投票
visit_Date

是否超过十天。如果是这样,我们可以轻松地按那些 difftime 的值进行子集化。否则,相反,我们对大于负十天的差异执行此操作。

TRUE
    

© www.soinside.com 2019 - 2024. All rights reserved.