首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用rnoaa查询NOAA的历史日平均气温?

如何使用rnoaa查询NOAA的历史日平均气温?
EN

Stack Overflow用户
提问于 2019-02-03 02:35:04
回答 2查看 806关注 0票数 0

我试图使用NOAA数据找出一系列日期之间的历史平均温度,并将其与长期平均温度进行比较。

我正在使用rnoaa包,但遇到了一些问题。对于长期平均值,我已经成功地使用了以下语法:

代码语言:javascript
复制
library('rnoaa')

start_date = "2010-01-15"
end_date = "2010-11-14"
station_id = "USW00093738"

weather_data <- ncdc(datasetid='NORMAL_DLY', stationid=paste0('GHCND:',station_id),
                     datatypeid='dly-tavg-normal',
                     startdate = start_date, enddate = end_date,limit=365)

这让我可以解析weather_data$data,以获得该站点在1月15日到11月14日之间的长期平均温度。

但是,我似乎找不到历史平均温度的正确数据集或数据类型。我希望获得与上面的代码相同的数据,除了这些天的实际日平均温度。你知道怎么查询这个吗?我已经做了几个小时了,但一直没有运气。

以下是我尝试过的内容:

代码语言:javascript
复制
weather_data <- ncdc(datasetid='GHCND', stationid=paste0('GHCND:',station_id),
                     startdate = start_date, enddate = end_date,limit=365)

uniq_d_types = unique(weather_data$data$datatype)
View(uniq_d_types)

这让我看到了GHCND数据集中的独特数据类型,但似乎没有一种数据类型是日平均温度。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-12 01:08:54

答案是从NOAA的ISD数据库中获取历史(即指定日期的实际天气数据,而不是长期平均天气数据)。通过查看位于以下位置的isd-history.csv文件,可以找到USAF值和WBAN值:

ftp://ftp.ncdc.noaa.gov/pub/data/noaa

下面是一个查询示例。

out <- isd(usaf='724030', wban = '93738', year=2018)

这将从ISD映射中获取相当于一年~每小时的天气数据。然后,您可以以您认为合适的方式解析/处理此数据(例如,像我这样的日平均温度)。

票数 1
EN

Stack Overflow用户

发布于 2019-02-03 09:53:20

为了使用rnoaa软件包从美国国家海洋和大气局的数据中获得平均每日实际温度,必须使用每小时的数据并按天汇总。每小时NOAA数据在NORMAL_HLY数据集中,所需的数据类型为HLY-TEMP-NORMAL

代码语言:javascript
复制
library('rnoaa')
library(lubridate)
options(noaakey = "obtain key from NOAA website")

start_date = "2010-01-15"
end_date = "2010-01-31"
station_id = "USW00093738"

weather_data <- ncdc(datasetid='NORMAL_HLY', stationid=paste0('GHCND:',station_id),
                     datatypeid = "HLY-TEMP-NORMAL",
                     startdate = start_date, enddate = end_date,limit=500)
data <- weather_data$data 

data$year <- year(data$date)
data$month <- month(data$date)
data$day <- day(data$date)
# summarize to average daily temps
aggregate(value ~ year + month + day,mean,data = data)

对输出执行...and操作:

代码语言:javascript
复制
> aggregate(value ~ year + month + day,mean,data = data)
   year month day    value
1  2010     1  15 323.5417
2  2010     1  16 322.8750
3  2010     1  17 323.4167
4  2010     1  18 323.7500
5  2010     1  19 323.2083
6  2010     1  20 321.0833
7  2010     1  21 318.4167
8  2010     1  22 317.6667
9  2010     1  23 319.0000
10 2010     1  24 321.0833
11 2010     1  25 323.5417
12 2010     1  26 326.0833
13 2010     1  27 328.4167
14 2010     1  28 330.9583
15 2010     1  29 333.2917
16 2010     1  30 335.7917
17 2010     1  31 308.0000
> 

请注意,在此数据集中,温度以十分之一度为单位存储,因此在2010年1月15日至31日期间,杜勒斯国际机场气象站的日均温度在30.8度到33.5度之间。

还要注意的是,要计算stationId的平均值并运行多个气象站,只需将station添加到aggregate()函数。

代码语言:javascript
复制
> # summarize to average daily temps by station
> aggregate(value ~ station + year + month + day,mean,data = data)
             station year month day    value
1  GHCND:USW00093738 2010     1  15 323.5417
2  GHCND:USW00093738 2010     1  16 322.8750
3  GHCND:USW00093738 2010     1  17 323.4167
4  GHCND:USW00093738 2010     1  18 323.7500
5  GHCND:USW00093738 2010     1  19 323.2083
6  GHCND:USW00093738 2010     1  20 321.0833
7  GHCND:USW00093738 2010     1  21 318.4167
8  GHCND:USW00093738 2010     1  22 317.6667
9  GHCND:USW00093738 2010     1  23 319.0000
10 GHCND:USW00093738 2010     1  24 321.0833
11 GHCND:USW00093738 2010     1  25 323.5417
12 GHCND:USW00093738 2010     1  26 326.0833
13 GHCND:USW00093738 2010     1  27 328.4167
14 GHCND:USW00093738 2010     1  28 330.9583
15 GHCND:USW00093738 2010     1  29 333.2917
16 GHCND:USW00093738 2010     1  30 335.7917
17 GHCND:USW00093738 2010     1  31 308.0000
> 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54496232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档