2014-03-07 59 views
2

我想確定雪季的長度在以下的數據幀的條件的長度(例如冬天雪季):確定一個季節與

DATE SNOW 
1998-11-01 0 
1998-11-02 0 
1998-11-03 0.9 
1998-11-04 1 
1998-11-05 0 
1998-11-06 1 
1998-11-07 0.6 
1998-11-08 1 
1998-11-09 2 
1998-11-10 2 
1998-11-11 2.5 
1998-11-12 3 
1998-11-13 6.5 
1999-01-01 15 
1999-01-02 15 
1999-01-03 19 
1999-01-04 18 
1999-01-05 17 
1999-01-06 17 
1999-01-07 17 
1999-01-08 17 
1999-01-09 16 
1999-03-01 6 
1999-03-02 5 
1999-03-03 5 
1999-03-04 5 
1999-03-05 5 
1999-03-06 2 
1999-03-07 2 
1999-03-08 1.6 
1999-03-09 1.2 
1999-03-10 1 
1999-03-11 0.6 
1999-03-12 0 
1999-03-13 1 

雪季由積雪深度定義( SNOW)超過1釐米,連續至少10天(如果11月有一天下雪,但融化後深度爲1釐米,我們認爲該季節未開始)。

我的想法是要確定:

1)積雪丁祖泉(在我的例子1998年11月8日)

2) 「消失」(這裏日日1999-03- 11)

3)計算1998年11月5日和1999年3月11日)

之間的時間段(NB天的對於第三步驟的長度,我可以很容易地得到使用this method 2個日期之間的數。

但如何定義具有條件的日期?

+0

有什麼規則可以找到'積雪建立'和'消失'。我沒有看到一些微不足道的東西嗎?還有其他的零和爲什麼0.6? –

+0

我正在尋找連續10天(雪季開始)≥1 cm的第一個日期,然後是雪<1 cm(雪季結束)的第一個日期。 – user2165907

+0

啊!謝謝!它應該在你的問題。將其添加到您的文本。 –

回答

0

這是一種方式:

# copy data from clipboard 
d <- read.table(text=readClipboard(), header=TRUE) 
# coerce DATE to Date type, add event grouping variable that numbers the groups 
# sequentially and has NA for values not in events. 
d <- transform(d, DATE=as.Date(DATE), 
        event=with(rle(d$SNOW >= 1), rep(replace(ave(values, values, FUN=seq), !values, NA), lengths))) 
# aggregate event lengths in days 
event.days <- aggregate(DATE ~ event, data=d, function(x) as.numeric(max(x) - min(x), units='days')) 
# get those events greater than 10 days 
subset(event.days, DATE > 10) 
# event DATE 
# 3  3 122 

您也可以使用事件分組變量找到的開始日期:

starts <- aggregate(DATE ~ event, data=d, FUN=head, 1) 
# 1  1 1998-11-04 
# 2  2 1998-11-06 
# 3  3 1998-11-08 
# 4  4 1999-03-13 

然後用event.days合併這樣的:

merge(event.days, starts, by='event') 
# event DATE.x  DATE.y 
# 1  1  0 1998-11-04 
# 2  2  0 1998-11-06 
# 3  3 122 1998-11-08 
# 4  4  0 1999-03-13 
+0

好的謝謝,不是很直觀(對我來說),但顯然它的工作......任何想法來獲得日期(季節的開始和結束)? – user2165907

+0

爲了得到本賽季結束的日期:DATE.y + DATE.x(實際上DAT.x是連續至少連續10天滿足≥10釐米雪的積雪期的長度)。順便提一下, – user2165907

+0

,起始總數中的「1」是多少? – user2165907