自从我意识到我的第一个例子没有很好地说明我遇到的问题后,我就更新了这个可重现的例子.

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.

推荐答案

(Updated for added constraint and data.)

我认为我们可以在这个问题上做一个"滚动连接".

times <- tibble(
  fiveminute = seq(floor_date(min(tb$time), unit = "5 mins"),
                   ceiling_date(max(tb$time), unit = "5 mins"),
                   by = "5 mins"))
left_join(times, tb, join_by(fiveminute >= time), multiple = "last")
# # A tibble: 25 × 3
#    fiveminute          time                value
#    <dttm>              <dttm>              <int>
#  1 2023-11-20 00:00:00 2023-11-20 00:00:00    10
#  2 2023-11-20 00:05:00 2023-11-20 00:00:00    10
#  3 2023-11-20 00:10:00 2023-11-20 00:06:00    10
#  4 2023-11-20 00:15:00 2023-11-20 00:13:00    10
#  5 2023-11-20 00:20:00 2023-11-20 00:20:00     9
#  6 2023-11-20 00:25:00 2023-11-20 00:20:00     9
#  7 2023-11-20 00:30:00 2023-11-20 00:20:00     9
#  8 2023-11-20 00:35:00 2023-11-20 00:33:00     6
#  9 2023-11-20 00:40:00 2023-11-20 00:38:00    10
# 10 2023-11-20 00:45:00 2023-11-20 00:43:00     6
# # ℹ 15 more rows
# # ℹ Use `print(n = ...)` to see more rows

数据

tb <- structure(list(time = structure(c(1700438400, 1700438760, 1700439180, 1700439600, 1700440320, 1700440380, 1700440560, 1700440680, 1700440920, 1700440980, 1700441400, 1700441580, 1700441880, 1700442420, 1700442720, 1700442780, 1700443080, 1700443260, 1700443380, 1700443440, 1700443560, 1700443680, 1700444160, 1700444280, 1700444340, 1700444460, 1700444700, 1700444880, 1700445360, 1700445600), tzone = "UTC", class = c("POSIXct", "POSIXt")), value = c(10L, 10L, 10L, 9L, 3L, 6L, 6L, 10L, 4L, 6L, 6L,  8L, 7L, 6L, 7L, 6L, 3L, 9L, 3L, 8L, 4L, 8L, 9L, 6L, 2L, 1L, 7L, 10L, 2L, 3L)), row.names = c(NA, -30L), class = c("tbl_df", "tbl", "data.frame"))

R相关问答推荐

pivot_longer:names_to和names_pattern

feature_weights参数没有影响Xgboost

从字符载体创建函数参数

如何将log 2刻度上的数字转换为自然log

强制相关图以显示相关矩阵图中的尾随零

如何在弹性表中为类别值的背景上色

寻找图片边缘

基于不同组的列的相关性

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

R s iml包如何处理语法上无效的因子级别?'

在R中使用Scale_y_Break后更改y轴标签

传递ggplot2的变量作为函数参数—没有映射级别以正确填充美学

SHINY:使用JS函数应用的CSS样式显示HTML表格

更改STAT_VALLES/STAT_PEAKS中的箭头线宽/大小

汇总数据的Sheffe检验的P值(平均值和标准差)

减go R中列表的所有唯一元素对

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

删除字符串R中的重复项

基于R中的辅助向量中的值有条件地连接向量中的字符串

我需要使用ggplot2制作堆叠条形图