R根据小时更改时间戳记的日期

时间:2018-12-03 22:11:13

标签: r

我有一系列时间戳,我想创建一个新变量,其值在上午9点之后具有小时值,将其更改为第二天的日期。如果在上午9点之前,则日期将保持不变。

[graphPointsMutableArray addObject:LMGraphPointMake(CGPointMake(1, 25), @"1", @"34.5")];

3 个答案:

答案 0 :(得分:1)

此解决方案回答了您的问题,但是,考虑编写代码以使原始数据不发生突变可能是值得的。工程/提取新变量(例如,一天中的时间,“上午9点或之后的晚上”等)以进行后续的汇总/子集设置可能会使开发和代码修改更加容易(尤其是如果您要在代码的结尾和开头之间来回移动)脚本)。

timestamps <- as.POSIXct(c('2018-5-11 01:57:00','2018-5-11 11:15:00'), "%Y-%m-%d %H:%M:%S")
mask <- as.integer(format(timestamps, "%H")) > 9
timestamps <- as.Date(timestamps)
timestamps[mask] <- timestamps[mask] + 1
timestamps
[1] "2018-05-11" "2018-05-12"

答案 1 :(得分:0)

to_s

答案 2 :(得分:0)

答案取决于时间戳的存储方式,但是我们假设它们是"POSIXct" "POSIXt"类型的,例如由lubridate::ymd_hms创建的。

然后我们可以使用lubridatedplyr。请注意,使用dplyr::if_else可以防止将日期转换为数字。

library(lubridate)
library(dplyr)

data.frame(dttm = ymd_hms(c("2018-5-11 11:15:00", 
                            "2018-5-11 01:57:00"))) %>% 
  mutate(hr = hour(dttm),
         dt = if_else(hr > 9, as_date(dttm + days(1)), as_date(dttm)))

结果:

                 dttm hr         dt
1 2018-05-11 11:15:00 11 2018-05-12
2 2018-05-11 01:57:00  1 2018-05-11