【问题标题】:Change Date Value when Time Changes from 23:59 to 0:00 (or similar).当时间从 23:59 更改为 0:00(或类似时间)时更改日期值。
【发布时间】:2018-04-01 23:17:13
【问题描述】:

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

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 行。有什么想法吗?

【问题讨论】:

    标签: r date datetime


    【解决方案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 了解时间项的前导数字差异变为负数的次数。

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 2023-02-25
      • 2013-03-31
      • 1970-01-01
      • 2013-12-06
      相关资源
      最近更新 更多