按ID分组,按时间分组(每个活动5分钟以内),在R中查找活动的时差

林内特

有没有一种方法可以让R按ID分组,然后识别时间上的“中断”,然后计算时差?例如:

                ID               TIME              
                A                12/18/2019 4:45:10 AM
                A                12/18/2019 4:45:11 AM
                A                12/18/2019 9:06:59 PM               
                B                12/18/2019 4:14:13 AM
                B                12/18/2019 4:14:14 AM

有人知道找到A的持续时间的方法吗?请注意,这不是difftime问题。我在4:45:10上午进行了某些活动,然后在4:45:11再次进行了。然后,我停止了此活动,并在晚上9:06进行了恢复。是否有代码可以准确地对ID进行分组,然后对时间进行分组,同时检测出时间上的巨大差异以避免错误的值?

这不是正确的解决方案。

                       diff<- data %>%
                       mutate(diff = difftime(as.POSIXct(Endtime, format = "%m/%d/%Y %I:%M:%S %p"), 
                       as.POSIXct(Starttime, format = "%m/%d/%Y %I:%M:%S %p"), units = "secs"))

任何帮助是极大的赞赏。我将继续对此进行研究。谢谢

卡米尔

就像我上面提到的,第一件事是将日期时间转换为日期时间对象。我正在lubridate为此。由于您希望将增量保持在某个阈值内,因此我将阈值持续时间保存为5分钟,可以根据需要进行更改。如果差异不止于此,请加以区别NA

我将分两步进行比较,以便您可以看到原始差异与删除长差异的差异。您可能只想一步就可以做到。

library(dplyr)
library(lubridate)

thresh <- duration(5, units = "minutes")

sample_df %>%
  mutate(TIME = mdy_hms(TIME)) %>%
  group_by(ID) %>%
  mutate(diff1 = TIME - lag(TIME)) %>%
  mutate(delta = if_else(diff1 < thresh, diff1, NA_real_))
#> # A tibble: 10 x 4
#> # Groups:   ID [3]
#>    ID    TIME                diff1      delta  
#>    <chr> <dttm>              <drtn>     <drtn> 
#>  1 A     2019-12-18 04:45:10    NA secs NA secs
#>  2 A     2019-12-18 04:45:11     1 secs  1 secs
#>  3 A     2019-12-18 16:06:59 40908 secs NA secs
#>  4 A     2019-12-18 16:07:01     2 secs  2 secs
#>  5 B     2019-12-18 04:14:13    NA secs NA secs
#>  6 B     2019-12-18 04:14:14     1 secs  1 secs
#>  7 B     2019-12-18 04:14:15     1 secs  1 secs
#>  8 C     2019-12-18 04:59:49    NA secs NA secs
#>  9 C     2019-12-18 04:59:50     1 secs  1 secs
#> 10 C     2019-12-18 04:59:51     1 secs  1 secs

使用dplyr::if_else而不是基ifelse是方便的,因为它使用严格的类型,这有助于确保我将delta列保留为持续时间对象,而不是丢失其时间分量而只是得到一个数值,NA而代替会发生这种情况NA_real_

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何按小时或10分钟分组时间

LINQ:5分钟内按日期范围分组

PySpark - 按 ID 和日期分组,并按时间列以分钟为单位求和

按连续时间对用户活动进行分组

熊猫时间索引DataFrame按时差分组

MySQL 5分钟移动平均值(按日期范围对行进行分组)

按熊猫30分钟的空间分组

根据R中30分钟或更长时间的时差确定离散事件

按15分钟间隔和1分钟数据分组数据

在R中按时间秒分组

有没有办法使用 unix 时间戳在 MySQL 中按一分钟时间段分组?

每隔5分钟对DataFrame进行分组

SQL将5分钟的3行分组为15分钟的单个行

分组ID,按时间排序,最后按先除

mysql / php,按用户ID分组,按时间排序

Python Pandas按时间排序,按用户ID分组

在Ubundu Lts 14.4中,使用gnome DE的鼠标在5分钟内没有活动,变得不活动

JavaScript-在活动的指定时间前30分钟关闭活动预定

Python Pandas:按日期分组,并按时间戳访问每个分组

在postgresql中按时间范围按数据分组

检查当前时间与下一个5分钟之间的时差

如何从具有用户登录日期和时间的表中获取最近20分钟的活动记录

如何按r中的时差对数据进行分组?

如何按时间对R中的XTS对象进行分组?

当datetime列按20分钟分组时如何聚合字典列

MYSQL按过去10分钟对日期间隔进行分组

Postgres按连续事件分组,如果间隔超过10分钟,则中断

将时间差不大于15分钟的行分组

相对于当前日期时间值+-30分钟进行分组