我有如下日期时间列表:

data <- data.frame(datetimes = c(ymd_hms("2024-01-01 04:12:35"), 
                                 ymd_hms("2024-04-01 14:52:20"), 
                                 ymd_hms("2024-03-18 23:43:56")))

我想将这些日期时间四舍五入/捕捉到一天中指定时间的下一个时间.

例如,如果我 Select 时间10:30:00,我想对这些日期中的每个日期进行四舍五入,以便:

2024-01-01 04:12:35变成-2024-01-01 10:30:00.

2024-04-01 14:52:20变成-2024-04-02 10:30:00.

2024-03-18 23:43:56变成-2024-03-19 10:30:00.

有没有方法可以轻松做到这一点?

谢谢

推荐答案

1)如果日期时间超过10:30:00,则将1添加到日期,然后粘贴10:30:00并转换回POSIXct.

library(dplyr)
library(lubridate)

cutoff <- "10:30:00" # specify as string
data %>%
  mutate(datetimes2 = 
    (as.Date(datetimes) + (sub(".* ", "", datetimes) > cutoff)) %>%
    paste(cutoff) %>% 
    ymd_hms)

##             datetimes          datetimes2
## 1 2024-01-01 04:12:35 2024-01-01 10:30:00
## 2 2024-04-01 14:52:20 2024-04-02 10:30:00
## 3 2024-03-18 23:43:56 2024-03-19 10:30:00

2)或者减go 10.5*3600,提取日期,添加1,转换回POSIXct并重新添加秒数.

cutoff <- 10.5 * 3600 # specify in seconds
data %>%
  mutate(datatimes2 = as.POSIXct(as.Date(datetimes-cutoff)+1) + cutoff)

##             datetimes          datatimes2
## 1 2024-01-01 04:12:35 2024-01-01 10:30:00
## 2 2024-04-01 14:52:20 2024-04-02 10:30:00
## 3 2024-03-18 23:43:56 2024-03-19 10:30:00

R相关问答推荐

在Julia中调用R函数

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

使用ggplot将平滑线添加到条形图

找出疾病消失的受试者

如何根据组大小应用条件过滤?

为什么当用osmdata映射R时会得到相邻状态?

合并DFS列表并将索引提取为新列

提取一个列表中单个列的重复观察结果R

如何将R中数据帧中的任何Nas替换为最后4个值

以相同的方式对每个表进行排序

如何从容器函数中提取conf并添加到ggplot2中?

R:用GGPLATE,如何在两个独立的变量中制作不同形状的散点图?

将多个变量组合成宽格式

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

有没有办法一次粘贴所有列

数值型数据与字符混合时如何进行绑定

如何将字符类对象中的数据转换为R中的字符串

R/shiny APP:如何充分利用窗口?

在直方图中显示两个变量

为什么R列名称忽略具有指定名称的向量,而只关注索引?