Datetime 如何根据时间间隔条件分组和计数行
在R中工作时,我有一个包含三个变量(ID、日期-时间和血压)的数据框,其中每一行都是一个人血压的测量值,以及相关的测量时间。每人有多行 我希望能够计算当前行/度量值(每人)前60分钟的行/度量值数量 下面是一些示例数据Datetime 如何根据时间间隔条件分组和计数行,datetime,group-by,count,dplyr,mutate,Datetime,Group By,Count,Dplyr,Mutate,在R中工作时,我有一个包含三个变量(ID、日期-时间和血压)的数据框,其中每一行都是一个人血压的测量值,以及相关的测量时间。每人有多行 我希望能够计算当前行/度量值(每人)前60分钟的行/度量值数量 下面是一些示例数据 my_df<-data.frame(ID=c("A","A","A","A","A","A","B","B","B","C","C","C","C","C"), Measured_DT_TM=as.POSIXct(c("2018-08-01 08:00:00","2018
my_df<-data.frame(ID=c("A","A","A","A","A","A","B","B","B","C","C","C","C","C"),
Measured_DT_TM=as.POSIXct(c("2018-08-01 08:00:00","2018-08-01 08:20:00","2018-08-01 08:30:00","2018-08-01 08:35:00","2018-08-01 11:00:00","2018-08-01 11:30:00","2018-08-01 14:10:00","2018-08-01 15:40:00","2018-08-01 15:00:00","2018-08-01 13:00:00","2018-08-01 13:05:00","2018-08-01 13:30:00","2018-08-01 13:55:00","2018-08-01 14:40:00")),
blood_pressure=c(115,115,120,130,140,130,120,125,125,150,160,130,130,131))
my_df%
排列(按组测量)%>%
变异(自第一次测量后的时间=difftime(测量的时间,第一次测量的时间,单位=c(“分钟”)),
自上一次测量以来的时间=difftime(测量的时间,滞后(测量的时间,n=1),单位=c(“分钟”))
我的_df_1
ID自第一次测量以来测量的时间自上一次测量以来测量的时间
1A 2018-08-01 08:00:00 115 0分钟不到一分钟
2018-08-01 08:20:00 115 20分钟20分钟
3 A 2018-08-01 08:30:00 120 30分钟10分钟
4a 2018-08-01 08:35:00 130 35分钟5分钟
5A 2018-08-01 11:00:00 140 180分钟145分钟
6a 2018-08-01 11:30:00 130 210分钟30分钟
7 B 2018-08-01 14:10:00 120分钟不到一分钟
8 B 2018-08-01 15:00:00 125 50分钟50分钟
9 B 2018-08-01 15:40:00 125 90分钟40分钟
10 C 2018-08-01 13:00:00 150分钟不到一分钟
11 C 2018-08-01 13:05:00 160 5分钟5分钟
12 C 2018-08-01 13:30:00 130 30分钟25分钟
13 C 2018-08-01 13:55:00 130 55分钟25分钟
14 C 2018-08-01 14:40:00 131 100分钟45分钟
我被困在这里,如何创建/变异一个新变量,从当前行(每人)开始计算前60分钟的行数。我想尝试创建no_u'measures_in_prev_60m'变量/列,如图所示
ID Measured_DT_TM bp time_since_first_measure time_since_prev_measure measures_in_prev_60m
<fct> <dttm> <dbl> <drtn> <drtn> <dbl>
1 A 2018-08-01 08:00:00 115 0 mins NA mins NA
2 A 2018-08-01 08:20:00 115 20 mins 20 mins 1
3 A 2018-08-01 08:30:00 120 30 mins 10 mins 2
4 A 2018-08-01 08:35:00 130 35 mins 5 mins 3
5 A 2018-08-01 11:00:00 140 180 mins 145 mins 0
6 A 2018-08-01 11:30:00 130 210 mins 30 mins 1
7 B 2018-08-01 14:10:00 120 0 mins NA mins NA
8 B 2018-08-01 15:00:00 125 50 mins 50 mins 1
9 B 2018-08-01 15:40:00 125 90 mins 40 mins 1
10 C 2018-08-01 13:00:00 150 0 mins NA mins NA
11 C 2018-08-01 13:05:00 160 5 mins 5 mins 1
12 C 2018-08-01 13:30:00 130 30 mins 25 mins 2
13 C 2018-08-01 13:55:00 130 55 mins 25 mins 3
14 C 2018-08-01 14:40:00 131 100 mins 45 mins 1
ID测量值\u DT\u TM bp时间\u自\u第一次\u测量时间\u自\u上一次\u测量时间\u在\u上一次\u 60m
1a 2018-08-01 08:00:00 1150分钟不,不,不
2018-08-01 08:20:00 115 20分钟20分钟1
3 A 2018-08-01 08:30:00 120 30分钟10分钟2
4a 2018-08-01 08:35:00 130 35分钟5分钟3
5 A 2018-08-01 11:00:00 140 180分钟145分钟0
6a 2018-08-01 11:30:00 130 210分钟30分钟1
7 B 2018-08-01 14:10:00 120分钟不到不到
8 B 2018-08-01 15:00:00 125 50分钟50分钟1
9 B 2018-08-01 15:40:00 125 90分钟40分钟1
10 C 2018-08-01 13:00:00 150分钟不到不到
11 C 2018-08-01 13:05:00 160 5分钟5分钟1
12 C 2018-08-01 13:30:00 130 30分钟25分钟2
13 C 2018-08-01 13:55:00 130 55分钟25分钟3
14 C 2018-08-01 14:40:00 131100分钟45分钟1
有人能提供建议/帮助吗?
谢谢这是使用列表列的好例子,列表列是
tidyverse
和purr
包的一部分
我使用mutate(y=list(x))
将每个ID的所有持续时间放入每一行,这将创建一个列表列。然后,我为每一行(截止点)创建标准。然后,我使用pmap
测试每一个持续时间是否合格(在前60分钟内),它在每一行上运行并接受多个输入(即持续时间和截止时间集)。同时,对于每一行,我添加符合条件的元素
library(tidyverse,悄悄地=TRUE)
#>警告:程序包“tidyverse”是在R版本3.5.3下构建的
#>警告:包“ggplot2”是在R版本3.5.3下生成的
#>警告:包“tibble”是在R版本3.5.3下构建的
#>警告:程序包“tidyr”是在R版本3.5.3下构建的
#>警告:程序包“readr”是在R版本3.5.2下生成的
#>警告:包“purrr”是在R版本3.5.3下生成的
#>警告:包“dplyr”是在R版本3.5.3下构建的
#>警告:程序包“stringr”是在R版本3.5.2下生成的
#>警告:“forcats”软件包是在R版本3.5.2下构建的
我的_df%
分组依据(ID)%>%
排列(按组测量)%>%
变异(自第一次测量后的时间=difftime(测量的时间,第一次测量的时间,单位=c(“分钟”)),
自上一次测量以来的时间=difftime(测量的时间,滞后(测量的时间,n=1),单位=c(“分钟”))
#为提高可读性而采取的步骤
我的_df%>%
变异(所有度量值按度量值=列表(自第一次度量值起的时间),
截止时间=自第一次测量以来的时间-60,
检查pmap内的测量值(按ID列出所有测量值,自第一次测量以来的时间,截止值),约(…1<…2&…1>=…3)),
在上一个60米范围内没有测量值=地图(检查上一个60米范围内的测量值,总和))%>%
视图()
#结果为一行,没有额外的列
我的_df%>%
变异(上一次测量中无测量值=pmap(列表(自第一次测量以来的时间)、自第一次测量以来的时间、自第二次测量以来的时间
ID Measured_DT_TM bp time_since_first_measure time_since_prev_measure measures_in_prev_60m
<fct> <dttm> <dbl> <drtn> <drtn> <dbl>
1 A 2018-08-01 08:00:00 115 0 mins NA mins NA
2 A 2018-08-01 08:20:00 115 20 mins 20 mins 1
3 A 2018-08-01 08:30:00 120 30 mins 10 mins 2
4 A 2018-08-01 08:35:00 130 35 mins 5 mins 3
5 A 2018-08-01 11:00:00 140 180 mins 145 mins 0
6 A 2018-08-01 11:30:00 130 210 mins 30 mins 1
7 B 2018-08-01 14:10:00 120 0 mins NA mins NA
8 B 2018-08-01 15:00:00 125 50 mins 50 mins 1
9 B 2018-08-01 15:40:00 125 90 mins 40 mins 1
10 C 2018-08-01 13:00:00 150 0 mins NA mins NA
11 C 2018-08-01 13:05:00 160 5 mins 5 mins 1
12 C 2018-08-01 13:30:00 130 30 mins 25 mins 2
13 C 2018-08-01 13:55:00 130 55 mins 25 mins 3
14 C 2018-08-01 14:40:00 131 100 mins 45 mins 1