时间从23:59更改为0:00(或类似)时更改日期值。

时间:2018-04-01 23:17:13

标签: r date datetime

我编写的代码用于读取如下所示的数据集:

Started 4/1/2015 23:57  
Trimmed 0
Recording IBI       
HR, Time, Value
-----------------------
20, 23:57:00, OK
25, 23:58:00, OK
15, 23:59:00, OK
15, 00:00:00, OK
15, 00:01:00, OK
20, 00:02:00, OK

开始日期仅列出一次,我将其拉入并插入日期列。数据连续运行,即使行的运行时间为多天,也没有划分日期何时应该更改。我想要一个命令来改变时间从23:59切换到0:00的日期(或通常在第二天开始传达的类似跳跃)。我尝试了不同的版本:

df$date <- ifelse(df$time > lag(df$time, n=1),
                    paste(as.Date(lag(df$date, n=1), format="%Y-%m-%d")),
                    paste(as.Date(lag(df$date, n=1), format="%Y-%m-%d")+1))

但是这只会改变当天切换的行中的单个单元格, 而不是所有以下的行,直到日期再次切换(在示例中只有第4行,而不是第5和第6行。任何想法?

1 个答案:

答案 0 :(得分:1)

使用cumsum计算时钟“翻身”的时间:

dat$date <-  c(Started= as.Date("4/1/2015 23:57", "%d/%m/%Y") ) + 
                                                cumsum(dat$Time == "00:00:00")

dat
  HR     Time Value       date
1 20 23:57:00    OK 2015-01-04
2 25 23:58:00    OK 2015-01-04
3 15 23:59:00    OK 2015-01-04
4 15 00:00:00    OK 2015-01-05
5 15 00:01:00    OK 2015-01-05
6 20 00:02:00    OK 2015-01-05

或者,如果你可能会错过一些中午时间cumsum,那么时间项目的前导数字差异会变为负数。