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