2012-12-03 93 views
0

我有一些棘手的问题需要解决,但我无法弄清楚任何答案。Ifelse条件的时间框架在R

我有淋浴阵雨的日期和值,单位mm。所以我需要做的就是查明,如果在连续3天内超过150毫米的雨量。 data.frame(“雨”)我看起来像这样。

date amount 
1. 1965-07-15  38.85315 
2. 1968-08-02  33.22356 
3. 1972-08-15  30.90391 
4. 1978-08-07  33.34613 
5. 1987-08-18  37.85918 
6. 1989-07-24  38.23495 
7. 1995-07-22  52.46519 
8. 1995-07-23  70.29935 
9. 1995-07-24  45.11350 

最后,我想只得到其中满足条件的日期。在这种情况下,结果应该是。

7. 1995-07-22  52.46519 
8. 1995-07-23  70.29935 
9. 1995-07-24  45.11350 

现在我试图想出一些if.condition来解决问题。不幸的是,我不能想到R中的任何功能都能帮助我。如果有人有关于如何解决这个案例的想法,我将不胜感激。

在此先感谢

回答

1

您的样本数据:

x <- read.table(header=T, 
       colClasses=c(date='Date','numeric'), 
text="date amount 
1965-07-15  38.85315 
1968-08-02  33.22356 
1972-08-15  30.90391 
1978-08-07  33.34613 
1987-08-18  37.85918 
1989-07-24  38.23495 
1995-07-22  52.46519 
1995-07-23  70.29935 
1995-07-24  45.11350" 
       ) 

找到每个黑社会的日期传播和金额:行

library(zoo) 
delta <- rollapply(x$date, 3, FUN=function(x) range(x)[2]-range(x)[1]) 
sums <- rollapply(x$amount, 3, FUN=sum) 

这些都是(起始位置),其你想要:

delta <= 2 & sums >= 150 
## [1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE 

这是所要求的数据子集:

w <- which(delta <= 2 & sums >= 150) 
x[c(w,w+1,w+2),] 
##   date amount 
## 7 1995-07-22 52.46519 
## 8 1995-07-23 70.29935 
## 9 1995-07-24 45.11350