我编写的代码用于读取如下所示的数据集:
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行。任何想法?
答案 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
,那么时间项目的前导数字差异会变为负数。