自从我意识到我的第一个例子没有很好地说明我遇到的问题后,我就更新了这个可重现的例子.
library(tidyverse)
set.seed(1)
start <- mdy_hms("11-20-2023 00:00:00")
int <- 61
end <- start + as.difftime(2, units = "hours")
dt <- seq(from = start, to = end, by = int)
time <- sample(dt, 30)
value <- sample(1:10,30, replace = TRUE)
tb <- tibble(time,value) %>% arrange(time)
输出
tb %>% head(10)
# A tibble: 10 × 2
time value
<dttm> <int>
1 2023-11-20 00:00:00 10
2 2023-11-20 00:06:00 10
3 2023-11-20 00:13:00 10
4 2023-11-20 00:20:00 9
5 2023-11-20 00:32:00 3
6 2023-11-20 00:33:00 6
7 2023-11-20 00:36:00 6
8 2023-11-20 00:38:00 10
9 2023-11-20 00:42:00 4
10 2023-11-20 00:43:00 6
我想对此数据帧进行过滤,以便每5分钟只保留最新的条目.例如,这里的第1行既是到00:00:00的最近日期,也是00:05:00的最近日期.第二排最近的时间是00:10:00.第5行应该删除,因为它是在00:30:00之后,但第6行更接近00:35:00.
作为我try 的一个例子,我将分钟四舍五入到最接近的5.
tb %>%
+ mutate(mins = round(minute(time)/5)*5) %>% head(10)
# A tibble: 10 × 3
time value mins
<dttm> <int> <dbl>
1 2023-11-20 00:00:00 10 0
2 2023-11-20 00:06:00 10 5
3 2023-11-20 00:13:00 10 15
4 2023-11-20 00:20:00 9 20
5 2023-11-20 00:32:00 3 30
6 2023-11-20 00:33:00 6 35
7 2023-11-20 00:36:00 6 35
8 2023-11-20 00:38:00 10 40
9 2023-11-20 00:42:00 4 40
10 2023-11-20 00:43:00 6 45
但是第四排违反了我的条件,00:32:00在00:30:00之后.另外,第二排违反了我的条件,因为00:05:00第二排的时间还没有发生00:06:00.