我有下面的数据框,其中包含id号,读数的日期时间和每次读数的值。
df <- data.frame(encounterId = c(1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026),
chartTime = c("2015-09-16 14:11:00 CEST", "2015-09-16 14:13:00 CEST", "2015-09-16 15:00:00 CEST", "2015-09-16 15:08:00 CEST", "2015-09-16 16:00:00 CEST", "2015-09-16 16:22:00 CEST", "2015-09-16 17:00:00 CEST", "2015-09-16 17:41:00 CEST", "2015-09-16 18:00:00 CEST", "2015-09-16 18:01:00 CEST", "2015-09-16 19:00:00 CEST", "2015-09-16 19:53:00 CEST"),
value = c(2.0, 2.0, 0.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0, 2.0, 2.0))
我想计算一下每一行之间的时差。
于是我写道:
df <- df %>%
group_by(encounterId) %>%
mutate(time_diff = as.numeric(difftime(lead(chartTime), chartTime), units = 'mins'))
然而,当几个值为零时,我想得到时间差的累积值(例如,序列的第一个零,以及以下零的NA值)。
预期结果将是:
| 遇到ID|chartTime|价值|时差|
| --------------|--------------|--------------|--------------|
| 一零二六|2015-09-16 14:11:00 CEST|二|二|
| 一零二六|2015-09-16 14:13:00 CEST|二|四十七|
| 一零二六|2015-09-16 15:00:00 CEST|0|八|
| 一零二六|2015-09-16 15:08:00 CEST|二|五十二|
| 一零二六|2015-09-16 16:00:00 CEST|二|二十二|
| 一零二六|2015-09-16 16:22:00 CEST|0|九九|
| 一零二六|2015-09-16 17:00:00 CEST|0|不适用|
| 一零二六|2015-09-16 17:41:00 CEST|0|不适用|
| 一零二六|2015-09-16 18:00:00 CEST|0|不适用|
| 一零二六|2015-09-16 18:01:00 CEST|二|五十九|
| 一零二六|2015-09-16 19:00:00 CEST|二|五十三|
| 一零二六|2015-09-16 19:53:00 CEST|二||
我已经尝试了几种方法,但都没有找到解决方案。显然,我宁愿不使用循环(for i in 1:nrow()),因为我的dataframe有超过10亿行,这将是时间膨胀!
我想感谢社区在这件事上的帮助。
1条答案
按热度按时间k4emjkb11#
我们可以先删除重复的0,计算time_diff,然后附加重复的0。