2014-10-20 29 views
0

我现在正在学习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

使用'dput(yourdataframe)'发布一些可重复的R代码。 *“数据与SEAS软件包喜欢的格式相同”*不可接受。 – smci 2014-10-20 20:01:29

+1

你好,我不知道你在问我什么..但我编辑..所以希望它更好理解..这是我的第一次尝试编程..所以请原谅我,如果不正确表达的东西正确的方式 – Lam 2014-10-20 20:17:39

回答

2

我现在需要计算各月降雨天数为> =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来完成上述操作,而不使用zooplyr/dplyr包。但是,不妨教你更好,更具扩展性,可维护的代码习惯用法。

+0

嗨我有这个数据集的另一个问题..我试图按数据子集(例如,我想所有1月和它的雨点在一起)我试过这个月< - 子集(rainydays_by_yearmon,月== 1),但不工作.. 我究竟做错了什么? – Lam 2014-10-22 13:59:36

+0

正如“所有十月份,跨越所有年份”一样吗?那么你会想要一个'月'栏;阅读'日期,动物园'软件包,并从日期对象中获取月份。 – smci 2014-10-22 15:42:32

+0

您需要创建另一个名为'month'的新列。 – smci 2014-10-22 18:22:26

相关问题