使用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)