计算特定情况下的零点数 R

Calculate count of zeros R for specific case

我的数据如下所示

我正在尝试计算单元 1 何时变为 0 以及它何时大于 0。假设单元 1 在 01/04/2019 首次降至零 02:00 并且它是零到 01/ 04/2019 03:00 所以它应该算作 1 然后它第二次在 01/04/2019 04:30 和它的零到 01/04/2019 05:00 哪个将被计为 2,其他单位的计算相同。

此外,我希望捕捉时差,例如第一个时间单位 1 变为 0 持续 2 小时,然后第二个时间单位变为 0 持续 1 小时,类似这样

我在想是否可以使用 if 语句来完成,该语句计数直到值大于零,然后更新循环。 我正在为如何将时间与之结合而苦苦挣扎。

最后的结果应该是

Unit  |            Went Offline|       Came online
Unit 1|     01/04/2019 02:00   |        01/04/2019 03:00
Unit 1|     01/04/2019 04:30   |        01/04/2019 05:00

我更喜欢一些 sudo 代码作为开始。但这里有一个示例解决方案。

# create data frame
date = format(seq(as.POSIXct("2019-04-01 00:00:00", tz="GMT"), 
           length.out=15, by='30 min'), '%Y-%m-%d %H:%M:%S')
unit1 = c(513, 612, 653, 0, 0, 0, 530, 630, 0, 0, 650, 512, 530 , 650, 420)

data = data.frame(date, unit1)

# subset all data that is Zero
data1 = data[data$unit1 != 0,]

# Create lead for from and to
data1$dateTo = lead(data1$date, 1, na.pad = TRUE)

#calculate time diff
data1$timediff = as.numeric(difftime(data1$dateTo,data1$date,units = "mins"))

# subset data that has a time diff more than 30 mins
data2 = subset.data.frame(data1, timediff > 30)