我现在正在学习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.0mm。所以最后。我会有两列(每年每个月,每个月的总天数#> 1.0毫米)
我不确定如何编写此代码,我们将不胜感激
谢谢
榄
答案 0 :(得分:2)
我现在需要计算每个月的降雨天数> = 1.0毫米。所以最后。我会有两列(每年每个月,每个月的总天数#> 1.0毫米)
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)其次,您需要在yearmon汇总的rain>=1.0
上执行汇总操作(建议您使用plyr或更新的dplyr)。我们将结果列命名为 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
个包。但也许可以教你更好,更具伸缩性,可维护的代码习惯用法。