如何使用rnoaa向NOAA查询历史每日平均温度?

时间:2019-02-02 18:35:04

标签: r noaa rnoaa

我正在尝试使用NOAA数据来查找某个日期范围内的历史平均温度,并将其与长期平均温度进行比较。

我使用的rnoaa包,并打了一个位一个障碍的。对于长期平均值,我已经成功使用以下语法:

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日之间的长期平均温度。

然而,我似乎无法找到合适的数据集或数据类型的历史平均温度。我想获得相同的数据上面的代码中,除了与实际日平均气温为那些日子。任何想法如何查询呢?我已经呆了几个小时,还没有运气。

我尝试过的事情如下:

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数据集中的唯一数据类型,但似乎没有数据类型是每日平均温度。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

为了使用rnoaa包从NOAA数据中获取平均每日实际温度,必须使用每小时的数据并按日汇总。每小时NOAA数据位于NORMAL_HLY数据集中,所需的数据类型为HLY-TEMP-NORMAL

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)

...以及输出:

> 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日至2010年1月31日期间,杜勒斯国际机场气象站的日平均温度在30.8度至33.5度之间。

还请注意,要通过stationId计算平均值并跨多个气象站运行,只需将station添加到aggregate()函数中即可。

> # 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
>