如何仅保留R中时差小于3分钟的事件

如何仅保留R中时差小于3分钟的事件,r,R,我有一个很大的数据集,其中每一行都有时间戳,所以有400k行,每一行都有事件的时间。 我想做的是只保留那些时差小于3分钟的参数(当然我想稍后更改此参数) 每行是一条消息,其中一列包含发送消息的确切时间。我想看看如果我设置消息之间的3分钟间隔,会留下多少消息。所以我需要一个代码,将删除邮件,如果它是发送后不到3分钟前一个 TIME_STAMP PREV_TIME_STAMP Unique ID 06-27-2021 07:07:22 06-

我有一个很大的数据集,其中每一行都有时间戳,所以有400k行,每一行都有事件的时间。 我想做的是只保留那些时差小于3分钟的参数(当然我想稍后更改此参数)

每行是一条消息,其中一列包含发送消息的确切时间。我想看看如果我设置消息之间的3分钟间隔,会留下多少消息。所以我需要一个代码,将删除邮件,如果它是发送后不到3分钟前一个

     TIME_STAMP             PREV_TIME_STAMP      Unique ID 
06-27-2021 07:07:22       06-27-2021 06:30:00         1 
06-27-2021 04:38:55       06-27-2021 04:21:31         1 
06-27-2021 05:05:26       06-27-2021 02:55:00         1 
06-27-2021 14:32:39       06-27-2021 12:30:00         1 
06-27-2021 14:42:13       06-27-2021 14:32:39         1 
06-27-2021 15:18:05       06-27-2021 15:11:00         2 
06-27-2021 15:19:05       06-27-2021 15:18:05         2 
06-27-2021 12:31:37       06-27-2021 12:30:00         2 
06-27-2021 12:35:05       06-27-2021 12:30:00         2
我正在用R编码


提前感谢

不确定我是否正确解释了您的意思,您可以将时间戳转换为POSIXct类,然后向上一个时间戳添加3分钟,并对上一个时间戳后超过3分钟的时间戳进行过滤

DT[TIME_STAMP >= PREV_TIME_STAMP + 3*60]
或者使用
difftime

DT[difftime(TIME_STAMP, PREV_TIME_STAMP, units="mins") > 3]
输出:

#             TIME_STAMP     PREV_TIME_STAMP UniqueID
# 1: 2021-06-27 07:07:22 2021-06-27 06:30:00        1
# 2: 2021-06-27 04:38:55 2021-06-27 04:21:31        1
# 3: 2021-06-27 05:05:26 2021-06-27 02:55:00        1
# 4: 2021-06-27 14:32:39 2021-06-27 12:30:00        1
# 5: 2021-06-27 14:42:13 2021-06-27 14:32:39        1
# 6: 2021-06-27 15:18:05 2021-06-27 15:11:00        2
# 7: 2021-06-27 12:35:05 2021-06-27 12:30:00        2
数据:

库(data.table)

DT首先必须将列更改为datetime对象(
POSIXct
)。 然后,一个简单的区别就是保留哪一行和放弃哪一行:

df$TIME_邮票2021-06-2704:38:55 2021-06-2704:21:31 1
#> 3 2021-06-27 05:05:26 2021-06-27 02:55:00         1
#> 4 2021-06-27 14:32:39 2021-06-27 12:30:00         1
#> 5 2021-06-27 14:42:13 2021-06-27 14:32:39         1
#> 6 2021-06-27 15:18:05 2021-06-27 15:11:00         2
#> 9 2021-06-27 12:35:05 2021-06-27 12:30:00         2
使用
dplyr

库(dplyr)
df%>%
在(vars(-Unique_ID),~as.POSIXct(,格式='%m-%d-%Y%H:%m:%S'))处进行变异%>%
过滤器(时间戳-上一个时间戳>3)
#>时间戳上一个时间戳唯一ID
#> 1 2021-06-27 07:07:22 2021-06-27 06:30:00         1
#> 2 2021-06-27 04:38:55 2021-06-27 04:21:31         1
#> 3 2021-06-27 05:05:26 2021-06-27 02:55:00         1
#> 4 2021-06-27 14:32:39 2021-06-27 12:30:00         1
#> 5 2021-06-27 14:42:13 2021-06-27 14:32:39         1
#> 6 2021-06-27 15:18:05 2021-06-27 15:11:00         2
#> 7 2021-06-27 12:35:05 2021-06-27 12:30:00         2
数据:


df请提供示例数据,例如使用
dput(df)
。请使用编辑功能将示例包含在上述问题中。并将您的数据示例限制为dput(head(df))
。因此,我需要他为相同的唯一ID保留3分钟内发生的事件。意思是在上一条消息之后3分钟。因此,计算的引用是上一条消息,可以更改,因为其中一些消息将被删除(时差小于3分钟的消息),一些消息可以保留。输出相同,但必须根据所解释的条件对其进行过滤上一条消息的时间是在
PREV\u time\u STAMP
列中指示的时间还是前一行的
PREV\u time
中指示的时间?两个答案都假设公式不准确。问题是,我需要的代码是,对于相同的唯一ID,只保留3分钟内发生的事件差异。意思是在上一条消息之后3分钟。因此,计算的参考是上一条消息!它可以更改,因为其中一些将被删除(时差小于3分钟的),而其中一些可以被删除。也许你可以在OP中添加所需的输出?如你所见,我们两人对你的qn的解释是相同的。
library(data.table)
DT <- fread("TIME_STAMP,PREV_TIME_STAMP,UniqueID 
06-27-2021 07:07:22,06-27-2021 06:30:00,1 
06-27-2021 04:38:55,06-27-2021 04:21:31,1 
06-27-2021 05:05:26,06-27-2021 02:55:00,1 
06-27-2021 14:32:39,06-27-2021 12:30:00,1 
06-27-2021 14:42:13,06-27-2021 14:32:39,1 
06-27-2021 15:18:05,06-27-2021 15:11:00,2 
06-27-2021 15:19:05,06-27-2021 15:18:05,2 
06-27-2021 12:31:37,06-27-2021 12:30:00,2 
06-27-2021 12:35:05,06-27-2021 12:30:00,2")[, ':=' (
        TIME_STAMP = as.POSIXct(TIME_STAMP, format="%m-%d-%Y %H:%M:%S"),
        PREV_TIME_STAMP = as.POSIXct(PREV_TIME_STAMP, format="%m-%d-%Y %H:%M:%S")  
    )]