我有每天重复测量的数据(如血糖监测仪)。每个人都可以在一段时间内佩戴该设备,因此一个人可以重复测量 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 天谢谢
对于
idvisit_Date
是否超过十天。如果是这样,我们可以轻松地按那些 difftime
的值进行子集化。否则,相反,我们对大于负十天的差异执行此操作。
TRUE