爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 24607|回复: 23

极端气候指数_R语言包climlnd(可实现多站点批量计算)

[复制链接]

新浪微博达人勋

发表于 2021-4-12 14:30:30 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 红烧小肥羊_ 于 2021-4-12 17:07 编辑

      还在使用Rclimdex计算气候指数吗?之前我也用过,但是需要手动输入,并且只能计算单站点,就在今天浏览CRAN时无意间发现有关于气候的包更新啦,真是要感谢R语言包的贡献者和前辈们!
      编辑包‘ClimInd’是基于R版本4.1.0,以月,季节性和年度计算的138个标准气候指数。 这些指标是在对极端天气事件和自然灾害领域的文献进行全面审查之后,根据对目标部门的直接和重大影响而选择的。 总体而言,所选指标表征了极端事件发生的频率,强度和持续时间的不同方面,并且来自一系列广泛的气候变量,包括 地表气温,降水,相对湿度,风速,多云,太阳辐射和积雪。 138个指数分类如下:基于温度的指数 (42),基于降水的指数(22),生物气候指数(21),基于风的指数(5),干旱/大陆指数(10),基于雪的指数(13),基于云/辐射的指数(6), 干旱指数(8),火灾指数(5),旅游业指数(5)。这些指标基本上涵盖了所有的极端气候事件指数,需要哪个直接调用函数即可!
   简单试了几个函数

  1. data <- read.table("cmorph2ts.txt")
  2. names(data) <- c("station", "year", "month", "day", "preci")
  3. > head(data)
  4.   station year month day preci
  5. 1   53399 2005     1   1 0.000
  6. 2   53399 2005     1   2 0.000
  7. 3   53399 2005     1   3 0.000
  8. 4   53399 2005     1   4 0.000
  9. 5   53399 2005     1   5 0.074
  10. 6   53399 2005     1   6 0.000
  11. #cdd单站点初尝试-----
  12. s53399 <- filter(data, station == "53399")
  13. cdd_53399 <- cdd(s53399$preci,s53399$year)
  14. > cdd_53399
  15. 2005 2006 2007 2008 2009
  16.   86  130   65   88  103
复制代码

     平时用到最多的可能就是多站点计算极端事件的指数了,在这里,我也简单试了一下。本来想使用apply家族函数直接应用到每个分组上,无奈对于函数多参数的输入还不是很了解,只简单用了个for循环也能达到我想要的效果,如果有更好的办法,请大家批评指正!
  1. nam <- unique(data$station)
  2. cdddata <- c()
  3. cdd_ <- c()
  4. for (i in 1:length(datas)) {
  5.   cdd_ <- cdd(datas[[i]]$preci, datas[[i]]$year)
  6.   cdddata <- rbind(cdddata, cdd_)
  7. }
  8. row.names(cdddata) <- nam
  9. > cdddata
  10.       2005 2006 2007 2008 2009
  11. 53399   86  130   65   88  103
  12. 53593  109   90  108   78  105
  13. 54526   90   86  130  100  100
复制代码
   在这里需要注意一下,RClimdex计算的cdd(持续干燥指数)是从当年7月1日~次年6月30日,第一年只计算6月30日以前的日期,而Climlnd则是根据年份正常计算该指标。可根据需要自行调整。


ClimInd.pdf

310.75 KB, 下载次数: 85, 下载积分: 金钱 -5

ClimInd_0.1-2.zip

1.61 MB, 下载次数: 103, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-4-12 21:07:00 | 显示全部楼层
请问楼主这个包要怎么用呢,直接在r里面打开的话没有r程序呀
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-13 09:13:29 | 显示全部楼层
不会游泳的fish 发表于 2021-4-12 21:07
请问楼主这个包要怎么用呢,直接在r里面打开的话没有r程序呀

就是跟正常的包一样啊
下载并且加载
  1. install.packages("climlnd")
  2. library(SPEI)
  3. library(lmomco)
  4. library(parallel)
  5. library(chron)
  6. library(weathermetrics)
  7. library(ClimInd)
复制代码

把其他的依赖包也一起加载进去,然后这个包里面的所有函数就可以直接调用了!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-13 15:23:49 | 显示全部楼层
我加载一直有问题,可能是R版本的问题?我安装的官网最新的4.0.5,请问R4.1.0在哪里下载安装呢,官网没有这个版本诶
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-13 18:49:16 | 显示全部楼层
不会游泳的fish 发表于 2021-4-13 15:23
我加载一直有问题,可能是R版本的问题?我安装的官网最新的4.0.5,请问R4.1.0在哪里下载安装呢,官网没有这 ...

可以了, 在R的安装包窗口能直接安装,多谢楼主!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-13 21:19:25 | 显示全部楼层
呜呜呜楼主我又来了,单独求一个站点也ok,但一用循环就报错: $ operator is invalid for atomic vectors是为什么呀{:eb303:}{:eb303:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-14 11:19:36 | 显示全部楼层
本帖最后由 红烧小肥羊_ 于 2021-4-14 11:22 编辑


                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-14 11:22:57 | 显示全部楼层
本帖最后由 红烧小肥羊_ 于 2023-5-16 10:53 编辑
不会游泳的fish 发表于 2021-4-13 21:19
呜呜呜楼主我又来了,单独求一个站点也ok,但一用循环就报错: $ operator is invalid for atomic vectors ...

我也是就懂一点点呢,不过可以给我看看你写的循环啊,是不是数据类型不对呢?我就循环跑了三个站点,是没问题的
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-14 14:24:53 | 显示全部楼层
嗯嗯,我就参照你的程序写的循环,不知道是不是数据太多了的原因,我要求一千多个站点五十多年的逐日数据,还有缺测。。然后我直接放弃自己编程算了。。。就求一下气温的指数也不难算,谢谢你呀!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-22 12:30:48 | 显示全部楼层
不会游泳的fish 发表于 2021-4-13 18:49
可以了, 在R的安装包窗口能直接安装,多谢楼主!

求教怎样 安装
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表