2016-11-30 81 views
0

我有一个名为的数据帧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 

这意味着有2个连续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

'20'和'50'应该在阿塔右下方一排? –

+0

20和50的位置并不重要,只要这些是每个降雨事件的持续时间累计总和 – Sami

回答

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步骤)。

+0

非常感谢!它工作得很好:) – Sami

+0

不客气,我很高兴它帮助。 – rosscova