按时间段超过阈值的时间序列值合计数
问题描述:
我现在正在学习R并使用SEAS软件包来帮助我在R中进行一些计算,并且数据与SEAS软件包所喜欢的格式相同。这是一个时间序列按时间段超过阈值的时间序列值合计数
require(seas)
data(mscdata)
dat.int <- (mksub(mscdata, id=1108447))
数据的标题,并为20年的数据
year yday date t_max t_min t_mean rain snow precip
不过,我现在需要计算各月降雨天数> = 1.0毫米。所以在最后。我将有两列(每月,每年,总#天各月雨量> =1.0毫米)
我不能肯定该怎么写代码和任何帮助,将不胜感激
谢谢你
林
答
我现在需要计算各月降雨天数为> =1.0毫米。所以在最后。我会有两列(每年每个月,每个月的总天数降雨量> = 1.0mm)
1)所以dat.int $ date是一个Date对象。第一步是您需要创建一个提取年份的新列dat.int$yearmon
,例如,使用zoo::yearmon
Extract month and year from a zoo::yearmon object
require(zoo)
dat.int$yearmon <- as.yearmon(dat.int$date, "%b %y")
2)其次,你需要做一个总结操作(建议您使用plyr或rain>=1.0
较新的dplyr)由yearmon汇总。我们来命名我们的结果列rainy_days。
如果你想存储rainy_days列回dat.int
数据框,您使用的transform
代替summarize
:
ddply(dat.int, .(yearmon), transform, rainy_days=sum(rain >= 1.0))
否则,如果你确实需要一个新的汇总数据帧:
require(plyr)
rainydays_by_yearmon <- ddply(dat.int, .(yearmon), summarize, rainy_days=sum(rain >= 1.0))
print.data.frame(rainydays_by_yearmon)
yearmon rainy_days
1 Jan 1975 14
2 Feb 1975 12
3 Mar 1975 13
4 Apr 1975 6
5 May 1975 6
6 Jun 1975 5
...
355 Jul 2004 3
356 Aug 2004 7
357 Oct 2004 14
358 Nov 2004 16
359 Dec 2004 19
注意:您可以使用普通老R来完成上述操作,而不使用zoo
或plyr/dplyr
包。但是,不妨教你更好,更具扩展性,可维护的代码习惯用法。
使用'dput(yourdataframe)'发布一些可重复的R代码。 *“数据与SEAS软件包喜欢的格式相同”*不可接受。 – smci 2014-10-20 20:01:29
你好,我不知道你在问我什么..但我编辑..所以希望它更好理解..这是我的第一次尝试编程..所以请原谅我,如果不正确表达的东西正确的方式 – Lam 2014-10-20 20:17:39