R 计算所选时间段内的元素数

R 计算所选时间段内的元素数,r,dplyr,R,Dplyr,我已选择在30分钟时间段内发生的活动。我想计算每个30分钟范围内的活动数量 node <- c("ABC","ABC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC&quo

我已选择在30分钟时间段内发生的活动。我想计算每个30分钟范围内的活动数量

node <- c("ABC","ABC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC")

activity <-c("LOSS_OF_MULTIPLEX_SECTION-OMS_A","LOSS_OF_MULTIPLEX_SECTION-OMS_A","NODE_ISOLATION","NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF","NODE_ISOLATION","LOSS_OF_MULTIPLEX_SECTION-OMS_A","NODE_ISOLATION","NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF","NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF", "UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A") 

e <-c("2020-05-09 04:50:42","2020-05-09 06:16:54","2020-05-08 16:11:58","2020-05-08 16:11:58","2020-05-08 16:30:07","2020-05-09 03:00:08","2020-05-09 03:08:08","2020-05-09 03:28:08","2020-05-09 13:08:08","2020-05-09 13:10:08","2020-05-09 13:28:08","2020-05-09 14:28:08")

df <- data.frame(node, activity, e)
df

node我不完全确定您想要什么,但这里可能是您感兴趣的内容。这个
POSIXlt
class是以秒为单位的,正如您观察到的:

as.numeric(as.POSIXlt(“1970-01-01 01:00:00”)#时间零点
#R> [1]0
as.numeric(as.POSIXlt(“1970-01-01 01:00:01”)#时间以秒为单位
#R> [1]1
因此,您可以将时间分成30分钟的间隔,如下所示:

#创建间隔变量
df 2020-05-09 06:00:00 2020-05-09 13:00:00 2020-05-09 14:00:00
#R> ABC 100
#R> ABCC031
#或
tapply(df$间隔,df$节点,函数(x)tapply(x,x,长度))
#R> $ABC
#R> 2020-05-09 04:30:00 2020-05-09 06:00:00
#R> 11
#R>
#R> $ABCC
#R> 2020-05-08 16:00:00 2020-05-08 16:30:00 2020-05-09 03:00:00 2020-05-09 13:00:00
#R> 2 1 3 3
#R> 2020-05-09 14:00:00
#R> 一,
这似乎与数据相符:

df[,c(“节点”,“e”)]
#R> 节点e
#R> 1 ABC 2020-05-09 04:50:42
#R> 2 ABC 2020-05-09 06:16:54
#R> 3 ABCC 2020-05-08 16:11:58
#R> 4 ABCC 2020-05-08 16:11:58
#R> 5 ABCC 2020-05-08 16:30:07
#R> 6 ABCC 2020-05-09 03:00:08
#R> 7 ABCC 2020-05-09 03:08:08
#R> 8 ABCC 2020-05-09 03:28:08
#R> 9 ABCC 2020-05-09 13:08:08
#R> 10 ABCC 2020-05-09 13:10:08
#R> 11 ABCC 2020-05-09 13:28:08
#R> 12 ABCC 2020-05-09 14:28:08

我不完全确定您想要什么,但这里可能是您感兴趣的内容。这个
POSIXlt
class是以秒为单位的,正如您观察到的:

as.numeric(as.POSIXlt(“1970-01-01 01:00:00”)#时间零点
#R> [1]0
as.numeric(as.POSIXlt(“1970-01-01 01:00:01”)#时间以秒为单位
#R> [1]1
因此,您可以将时间分成30分钟的间隔,如下所示:

#创建间隔变量
df 2020-05-09 06:00:00 2020-05-09 13:00:00 2020-05-09 14:00:00
#R> ABC 100
#R> ABCC031
#或
tapply(df$间隔,df$节点,函数(x)tapply(x,x,长度))
#R> $ABC
#R> 2020-05-09 04:30:00 2020-05-09 06:00:00
#R> 11
#R>
#R> $ABCC
#R> 2020-05-08 16:00:00 2020-05-08 16:30:00 2020-05-09 03:00:00 2020-05-09 13:00:00
#R> 2 1 3 3
#R> 2020-05-09 14:00:00
#R> 一,
这似乎与数据相符:

df[,c(“节点”,“e”)]
#R> 节点e
#R> 1 ABC 2020-05-09 04:50:42
#R> 2 ABC 2020-05-09 06:16:54
#R> 3 ABCC 2020-05-08 16:11:58
#R> 4 ABCC 2020-05-08 16:11:58
#R> 5 ABCC 2020-05-08 16:30:07
#R> 6 ABCC 2020-05-09 03:00:08
#R> 7 ABCC 2020-05-09 03:08:08
#R> 8 ABCC 2020-05-09 03:28:08
#R> 9 ABCC 2020-05-09 13:08:08
#R> 10 ABCC 2020-05-09 13:10:08
#R> 11 ABCC 2020-05-09 13:28:08
#R> 12 ABCC 2020-05-09 14:28:08

30分钟(从您的第一次数据开始算起)或四舍五入到最接近的30分钟(一小时)?30分钟(从您的第一次数据开始算起)或四舍五入到最接近的30分钟(一小时)?谢谢您的考虑,我已经更新了问题,我希望现在问题清楚了。谢谢您的考虑,我已经更新了问题,我希望现在一切都清楚了。
library(dplyr)

tlead <- . %>% lead(., order_by = ., default = max(.) + 1801) # 1801 secs
tlag <- . %>% lag(., order_by = ., default = min(.) - 1801)

df %>% 
  mutate(e = as.POSIXct(e, tz = "")) %>% 
  group_by(node) %>% 
  filter(e - tlag(e) <= as.difftime("00:30:00") | tlead(e) - e <= as.difftime("00:30:00"))
node <- c("ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC","ABCC")

activity <-c("NODE_ISOLATION","NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF","NODE_ISOLATION","LOSS_OF_MULTIPLEX_SECTION-OMS_A","NODE_ISOLATION","NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF","NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF", "UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A","UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A") 

e <-c("2020-05-08 16:11:58","2020-05-08 16:11:58","2020-05-08 16:30:07","2020-05-09 03:00:08","2020-05-09 03:08:08","2020-05-09 03:28:08","2020-05-09 13:08:08","2020-05-09 13:10:08","2020-05-09 13:28:08")

df1 <- data.frame(node, activity, e)
df1
node <- c("ABCC","ABCC","ABCC")

activity <-c("NODE_ISOLATION,NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF,NODE_ISOLATION","LOSS_OF_MULTIPLEX_SECTION-OMS_A,NODE_ISOLATION,NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF","NE_NOT_REACH_VIA_PRIMARY_MNG_INTERF,UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A,UNDERLYING_RESOURCE_UNAVAILABLE-OMS_A") 

cnt <- c(3,3,3)
df1 <- data.frame(node, activity, cnt)
df1