我有一系列时间戳,我想创建一个新变量,其值在上午9点之后具有小时值,将其更改为第二天的日期。如果在上午9点之前,则日期将保持不变。
[graphPointsMutableArray addObject:LMGraphPointMake(CGPointMake(1, 25), @"1", @"34.5")];
答案 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
创建的。
然后我们可以使用lubridate
和dplyr
。请注意,使用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