【问题标题】:rnoaa showing data is available, but not returning requestrnoaa 显示数据可用,但未返回请求
【发布时间】:2016-02-04 07:07:11
【问题描述】:

我正在使用rnoaa() 包获取一些历史天气数据,但在检索数据时遇到了问题,这些数据表明可用,但不会返回。

为了使这个可重现的示例正常工作,您首先需要来自http://www.ncdc.noaa.gov/cdo-web/token 的令牌

设置:

options(noaakey = "KEY_EMAILED_TO_YOU")
library(rnoaa)

检查可用的数据类型:

ncdc_datatypes(stationid = "GHCND:US009052008", datasetid='GHCND')

输出:

$meta
  offset count limit
1      1     4    25

$data
Source: local data frame [4 x 5]

     mindate    maxdate                                      name datacoverage    id
       (chr)      (chr)                                     (chr)        (int) (chr)
1 1781-01-01 2015-10-30              Precipitation (tenths of mm)            1  PRCP
2 1857-01-18 2015-10-29                           Snow depth (mm)            1  SNWD
3 1763-01-01 2015-10-30 Maximum temperature (tenths of degrees C)            1  TMAX
4 1763-01-01 2015-10-30 Minimum temperature (tenths of degrees C)            1  TMIN

attr(,"class")
[1] "ncdc_datatypes"
ncdc(stationid = "GHCND:US009052008", datasetid='GHCND', datatypeid = 'PRCP', startdate = "1900-01-01", enddate = "1900-12-30")

请注意,PRCP 可用的最小数据是 1781。所以让我试着从 1900 年提取数据,因为它应该是可用的。

尝试从 1900 年提取数据:

ncdc(stationid = "GHCND:US009052008", datasetid='GHCND', datatypeid = 'PRCP', startdate = "1900-01-01", enddate = "1900-12-30")

输出:

$meta
$meta$totalCount
NULL

$meta$pageCount
NULL

$meta$offset
NULL


$data
Source: local data frame [0 x 0]


attr(,"class")
[1] "ncdc_data"
Warning message:
In check_response(temp) : Sorry, no data found

【问题讨论】:

  • 根据to this page,Sioux Falls (ENVIRON._CANADA) 的数据可用于 2008-2015 年期间。
  • @Pascal 感谢您的回复,但我正在寻找一种方法来验证 R 中的可用年份,因为我有很多电台要检查。有什么想法吗?
  • 在我的问题中,我说我遇到了可用数据的问题,但当我查询数据库时它说不可用。通过询问可用的数据类型,我要求验证可用的年份。抱歉,如果不清楚。

标签: r weather rnoaa


【解决方案1】:

一种方式:

sta <- "US009052008"
input <- paste0("ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/all/",sta,".dly")

output <- read.fwf(input, n = -1,
                   widths = c(11,4,2,4), 
                   col.names = c("ID", "YEAR", "MONTH", "ELEMENT"))

out <- split(output, output$ELEMENT)

foo <- function(x){
  y1 <- head(x[,c("YEAR", "MONTH")], 1)
  y2 <- tail(x[,c("YEAR", "MONTH")], 1)

  paste(month.abb[y1$MONTH], y1$YEAR, "-", month.abb[y2$MONTH], y2$YEAR)
}
do.call(rbind, lapply(out, foo))
#       [,1]                 
# PRCP "Oct 2008 - Oct 2015"
# SNWD "Dec 2009 - Oct 2015"
# TMAX "Oct 2008 - Oct 2015"
# TMIN "Oct 2008 - Oct 2015"

【讨论】:

  • 谢谢。男孩,我觉得自己像个白痴,因为我不知道如何处理 *.dly 文件,而 read.fwf 以这种方式完美运行。你刚刚用一块石头杀死了两只鸟,所以谢谢!您能解释一下您是如何知道如何处理 *.dly 文件并设置 widths 的吗?
  • 我在README fileIII 部分中获得了所有信息。数据文件的格式(“.dly”文件)。您可以通过转换列数来获得长度。然后,对于 ID,列是 1-11,所以长度是 11。对于 YEAR,列是 12-15,所以长度是 4。以此类推。
  • 我从来没有遇到过固定宽度的格式。我有一些阅读要做。谢谢!
  • 如果要读取整个文件,需要read.fwf(input, c(11,4,2,4, rep(c(5,1,1,1), 31)))
  • 非常感谢您的提示。这也是我想知道的。
猜你喜欢
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多