Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用dplyr筛选R中某个时间间隔内的事件日志_R_Dplyr_Cut_Cumsum_Difftime - Fatal编程技术网

使用dplyr筛选R中某个时间间隔内的事件日志

使用dplyr筛选R中某个时间间隔内的事件日志,r,dplyr,cut,cumsum,difftime,R,Dplyr,Cut,Cumsum,Difftime,我有以下格式的事件日志 我已经使用dplyr按日期和ID创建了组,因此日期或ID的更改将被视为不同的组 我只希望事件的时间间隔>=5秒,并删除其余的事件。 我已经使用了dplyr和timelag来实现这一点,因为我无法动态地为此分配一个滞后时间间隔。但是我当前的代码检查一个延迟间隔,结果我删除了比预期更多的行。。理想情况下我想要“13:10:22”, 第2组中保留“13:10:24”,因为从“13:10:17”到这些时间的时滞为5秒或更长 我用“计时”来处理时间。 我知道时间延迟逻辑在我的情

我有以下格式的事件日志


我已经使用dplyr按日期和ID创建了组,因此日期或ID的更改将被视为不同的组

我只希望事件的时间间隔>=5秒,并删除其余的事件。

我已经使用了dplyr和timelag来实现这一点,因为我无法动态地为此分配一个滞后时间间隔。但是我当前的代码检查一个延迟间隔,结果我删除了比预期更多的行。。理想情况下我想要“13:10:22”, 第2组中保留“13:10:24”,因为从“13:10:17”到这些时间的时滞为5秒或更长

我用“计时”来处理时间。 我知道时间延迟逻辑在我的情况下不起作用。除了使用昂贵的for/if循环之外,还有更好的选择吗

我用过的代码

data$Date <- as.Date(data$Date,format = "%m/%d/%Y")  
data$Time <- chron(times = data$Time)  

data <- data  %>% arrange(Date,Time,ID)    
data$Group <- data %>%  group_by(Date,ID) %>% group_indices    
data <- data %>%     
        group_by(Group)  %>%       
        mutate(time.difference = Time - lag(Time)) %>%    
        filter(time.difference >= 0.00005787 | is.na(time.difference))  
data$Date%
突变(time.difference=时滞(time))%>%
过滤器(时差>=0.00005787 |为.na(时差))
Dput数据

结构(列表)(日期=结构)(c)(17469,17469,17469,, 17469, 17469, 17469, 17469, 17469, 17469, 17469, 17469, 17469, 17469174691747017470174701747017470),class=“Date”),Time=structure(c(0.936400462962963, 0.9425, 0.9425, 0.942511574074074, 0.942523148148148, 0.9703125, 0.548518518518519, 0.548530092592593, 0.54880787037037, 0.54880787037037, 0.548819444444444, 0.548842592592593, 0.548865740740741, 0.548888888888889, 0.557337962962963, 0.6140625, 0.618761574074074, 0.618958333333333, 0.62230324070041),format=“h:m:s”,class=“times”),ID=c(“P1”, “P1”、“P1”、“P1”、“P1”、“P1”、“P1”、“P5”、“P5”、“P5”、“P5”、“P5”、“P5”、“P5”、“P5”, “P5”,“P5”,“P5”,“P9”,“P9”,“P9”,“P9”),.Names=c(“日期”, “Time”,“ID”),row.names=c(NA,-19L),class=“data.frame”)

data$datetime%group\u索引
数据过滤器%group\U by(group)%%>%filter(行编号()==1)
我分两步完成了这项工作,因为我希望将组索引的中间结果写入CSV。

data$datetime%group\u索引
数据过滤器%group\U by(group)%%>%filter(行编号()==1)

我分两步完成了这项工作,因为我希望将包含组索引的中间结果写入CSV。

请展示一个包含
dput
@akrun添加数据的可复制小示例。请展示包含
dput
@akrun添加数据的可复制小示例。谢谢。。但这并不能解决我在第二组中加入“13:10:22”、“13:10:24”的问题。我不是在看即时的时间延迟。给定一个事件,我不想包括小于4秒的下n个事件。我只想包括>=5秒的事件。此外,上述代码不包括时间延迟将返回NA的组的第一个元素。想跳过这里的逻辑工作吗谢谢..希望我能早点看到这个。。我用了不同的逻辑解决了这个问题。。首先,我将日期和时间组合为posixct对象,然后进行了一些计算。。附上我的代码谢谢。。但这并不能解决我在第二组中加入“13:10:22”、“13:10:24”的问题。我不是在看即时的时间延迟。给定一个事件,我不想包括小于4秒的下n个事件。我只想包括>=5秒的事件。此外,上述代码不包括时间延迟将返回NA的组的第一个元素。想跳过这里的逻辑工作吗谢谢..希望我能早点看到这个。。我用了不同的逻辑解决了这个问题。。首先,我将日期和时间组合为posixct对象,然后进行了一些计算。。附加我的代码
library(dplyr)
data %>%
  group_by(Group) %>%
  arrange(Group, Date, Time) %>% 
  filter((Time - lag(Time)) >= 5.787037e-05 | row_number() == 1L)
data$datetime <- as.POSIXct(paste(data$Date, data$Time), format="%m/%d/%Y %H:%M:%S")  
data$group <-  data %>% group_by(ID,by5sec=cut(datetime, breaks="5 sec")) %>%  group_indices
data_filter <- data %>% group_by(group) %>% filter(row_number()==1)