【问题标题】:Determine the length of a season with conditions (ex. winter snow season)根据条件确定季节的长度(例如冬季雪季)
【发布时间】:2014-03-07 13:34:45
【问题描述】:

我想在以下数据框中确定雪季的长度:

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) 至少连续 10 天超过 1 厘米(因此,如果 11 月的某一天下雪,但在雪融化后深度小于 1 厘米,我们认为该季节不开始)。

我的想法是确定:

1) 积雪建立的日期(在我的例子中是 1998-11-08)

2) “消失”的日期(此处为 1999-03-11)

3) 计算期间的长度(1998-11-05 和 1999-03-11 之间的天数)

对于第三步,我可以使用this method 轻松获取两个日期之间的数字。

但是如何定义带条件的日期呢?

【问题讨论】:

  • 找到“雪堆建立”和“消失”的规则是什么。这是我没有看到的微不足道的东西吗?还有其他零,为什么是 0.6?
  • 我正在寻找至少连续 10 天 >= 1 厘米的第一个日期(雪季开始),然后是雪
  • 啊!谢谢!你的问题应该在那里。将其添加到您的文本中。
  • 但它是......我试图用另一种方式解释它

标签: r time-series


【解决方案1】:

这是一种方式:

# 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

【讨论】:

  • 好的,谢谢,不是很直观(对我来说),但显然它正在工作......知道日期(赛季开始和结束)吗?
  • 并得到赛季结束的日期:DATE.y + DATE.x(实际上DAT.x是满足>= 10 cm积雪条件的雪期长度至少连续 10 天)。
  • 对了,starts总和中的“1”是什么?
  • 这是head的参数,说给我第一个元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
相关资源
最近更新 更多