首页 > 解决方案 > 计算条件累积时间

问题描述

按照这个问题的指示。

我想通过考虑它们各自的最后切换状态来计算所有s的累积时间。Cat

EDIT: 我还想检查 a 的 FIRSTToggle状态是否CatOff,如果是这样,对于那个特定cat的,从午夜00:00:00到第一个 FIRST Off 时间的时间应该添加到它的总条件累积 ontime 中。

样本数据:

       Time Cat Toggle
1  05:12:09  36 On
2  05:12:12 26R Off # First Toggle of this Cat happens to be Off, Condition met
3  05:12:15 26R On
4  05:12:16 26R Off
5  05:12:18  99 Off # Condition met
6  05:12:18  99 On
7  05:12:24  36 Off
8  05:12:26  36 On
9  05:12:29  80 Off # Condition met
10 05:12:30  99 Off
11 05:12:31  95 Off # Condition met
12 05:12:32  36 Off

所需的样本输出:

  Cat Time(Secs)
1 36  21
2 26R 18733 # (=1+18732), 18732 secs to be added = total Sec from midnight till 05:12:12
3 99  18750 # (=12+18738), 18738 secs to be added = total Sec from midnight till 05:12:18
4 ..  ..

任何形式的帮助表示赞赏。

标签: rdplyrdifftime

解决方案


可以使用as.difftime函数将时间从H:M:S格式转换为秒。然后为每个On雕像找到lead记录,以计算从 开始的时间间隔On

library(dplyr)

# Convert Time in seconds.
df %>% mutate(Time = as.difftime(Time, units = "secs")) %>%
  group_by(Cat) %>%
  mutate(TimeInterVal = ifelse(Toggle == "On", (lead(Time) - Time), 0)) %>%
  summarise(TimeInterVal = sum(TimeInterVal))


# # A tibble: 5 x 2
#   Cat   TimeInterVal
#   <chr>        <dbl>
# 1 26R           1.00
# 2 36           21.0 
# 3 80            0   
# 4 95            0   
# 5 99           12.0 

注意: On 可以考虑安排数据,Time确保行按时排序。

数据:

df <- read.table(text ="
Time Cat Toggle
1  05:12:09  36 On
2  05:12:12 26R Off
3  05:12:15 26R On
4  05:12:16 26R Off
5  05:12:18  99 Off
6  05:12:18  99 On
7  05:12:24  36 Off
8  05:12:26  36 On
9  05:12:29  80 Off
10 05:12:30  99 Off
11 05:12:31  95 Off
12 05:12:32  36 Off",
header = TRUE, stringsAsFactors = FALSE)

推荐阅读