2012-12-03 119 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