我有一个名为 BalticRainfallDuration 的数据框。数据框的一小部分如下所示。
"TIMESTAMP" "Rainfall" "Duration"
2014-03-19 10:40:00 0.508 0
2014-03-19 10:50:00 1.016 10
2014-03-19 11:00:00 0.254 10
2014-03-24 09:10:00 0.254 7090
2014-03-26 12:40:00 0.254 3090
2014-03-27 11:50:00 0.254 1390
2014-03-27 12:20:00 0.254 30
2014-03-28 14:30:00 0.254 1570
2014-03-28 14:40:00 0.508 10
2014-03-28 14:50:00 0.508 10
2014-03-28 15:00:00 0.254 10
2014-03-28 15:10:00 0.508 10
2014-03-28 15:20:00 0.254 10
2014-03-28 15:40:00 0.254 20
2014-03-29 13:00:00 0.254 1280
对于TIMESTAMP中持续10分钟降雨的每个事件,我想总结那些相应事件的“持续时间”。输出数据框“Event_Duration”应如下所示:
"TIMESTAMP" "Rainfall" "Duration" "Duration_sum"
2014-03-19 10:40:00 0.508 0
2014-03-19 10:50:00 1.016 10 20
2014-03-19 11:00:00 0.254 10
2014-03-24 09:10:00 0.254 7090 NA
2014-03-26 12:40:00 0.254 3090 NA
2014-03-27 11:50:00 0.254 1390 NA
2014-03-27 12:20:00 0.254 30 NA
2014-03-28 14:30:00 0.254 1570 NA
2014-03-28 14:40:00 0.508 10
2014-03-28 14:50:00 0.508 10
2014-03-28 15:00:00 0.254 10 50
2014-03-28 15:10:00 0.508 10
2014-03-28 15:20:00 0.254 10
2014-03-28 15:40:00 0.254 20 NA
2014-03-29 13:00:00 0.254 1280 NA
这意味着持续10分钟的持续降雨事件。活动1为20分钟,活动2为50分钟。
我尝试了以下代码:
Event_Duration<-with(BalticRainfallDuraiton,diff(BalticRainfallDuraiton$TIMESTAMP)==10, sum(BalticRainfallDuraiton$Duration))
Duration_Sum<-data.frame(cbind(BalticRainfallDuration,Event_Duration))
但是在输出中我只收到TRUE或FALSE结果,而不是持续时间总和的值。 如果有人可以通过建议更正我的代码或提供替代代码来帮助我,我将非常感激。
答案 0 :(得分:0)
这个怎么样:
library( dplyr )
df <- df %>%
mutate( grp = ifelse( Duration > 10, 1, 0 ) ) %>%
mutate( grp = cumsum( grp ) ) %>%
group_by( grp ) %>%
mutate( Duration_sum = c( rep( NA, n() - 1 ), sum( Duration ) - Duration[1] ) ) %>%
ungroup() %>%
mutate( grp = NULL )
给出了:
> df
# A tibble: 15 × 4
TIMESTAMP Rainfall Duration Duration_sum
<dttm> <dbl> <int> <int>
1 2014-03-19 10:40:00 0.508 0 NA
2 2014-03-19 10:50:00 1.016 10 NA
3 2014-03-19 11:00:00 0.254 10 20
4 2014-03-24 09:10:00 0.254 7090 0
5 2014-03-26 12:40:00 0.254 3090 0
6 2014-03-27 11:50:00 0.254 1390 0
7 2014-03-27 12:20:00 0.254 30 0
8 2014-03-28 14:30:00 0.254 1570 NA
9 2014-03-28 14:40:00 0.508 10 NA
10 2014-03-28 14:50:00 0.508 10 NA
11 2014-03-28 15:00:00 0.254 10 NA
12 2014-03-28 15:10:00 0.508 10 NA
13 2014-03-28 15:20:00 0.254 10 50
14 2014-03-28 15:40:00 0.254 20 0
15 2014-03-29 13:00:00 0.254 1280 0
这里可能没有必要执行几个步骤,具体取决于您希望输出的样子。同样,您可能希望摆脱零持续时间值(最后只是额外的mutate
步骤。)