计算特定情况下的零点数 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)
我的数据如下所示
我正在尝试计算单元 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)