r - 计算条件累积时间
问题描述
按照这个问题的指示。
我想通过考虑它们各自的最后切换状态来计算所有s的累积时间。Cat
EDIT:
我还想检查 a 的 FIRSTToggle
状态是否Cat
是Off
,如果是这样,对于那个特定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 .. ..
任何形式的帮助表示赞赏。
解决方案
可以使用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)
推荐阅读
- sweetalert2 - 未点击甜蜜警报中的复选框
- sqlite - 如何更新 SQLite 中的随机行?
- encryption - GPG:无法导入私钥/密钥
- cakephp-3.0 - CakePHP - 将一对多数据保存到数据库
- c# - c#持续访问web服务器的方法
- php - 如何在 Laravel 中获取包含特殊字符的路线
- c# - VS 2017 ASP.Net Core Web 应用程序无法针对 .Net Framework
- ruby-on-rails - 活动管理员过滤器不起作用
- c# - 尝试项目示例“HelloAR”,构建成功但手机上没有显示
- xpages - xPages REST 服务提供 Notes 日历存储