改变 rnoaa 包的输出?

Altering output from rnoaa package?

谢谢你的帮助。

目前程序 R 中的 rnoaa 包为您提供 list 的输出。您可以轻松访问此列表中的数据;但是,我想改变数据的输出方式。它目前不是我可以使用的格式。我有动物搬迁,我正在尝试为每只动物搬迁指定一个在搬迁当天记录的温度值。

目前我的动物数据框的头部是这样的:

   ID       date        time            datetime      lat       lon DOP Elevation  
1 333 2017-03-15  2:30:47 AM 2017-03-15 02:30:47 32.73810 -90.15422   3     48.64      
2 333 2017-03-15 10:30:28 PM 2017-03-14 22:30:28 32.73797 -90.15424   2     39.45      
3 333 2017-05-25 10:31:00 PM 2017-05-24 22:31:00 32.73790 -90.15489   7     91.02      
4 333 2017-05-25  2:30:30 AM 2017-05-25 02:30:30 32.73758 -90.15488   4     28.65      
5 333 2017-05-13 10:30:54 AM 2017-05-13 10:30:54 32.73753 -90.15261   4     32.97      
6 333 2017-04-14  2:31:59 AM 2017-04-14 02:31:59 32.73747 -90.15155   5     45.97

从 rnoaa 包中获取天气数据很容易。

library(rnoaa)
weather <- ncdc(datasetid = "GHCND", stationid = "GHCND:USC00221389", datatypeid = c("PRCP", "TMIN", "TMAX", "TOBS"),
                startdate = "2017-03-01", enddate = "2017-12-31", add_units = T, limit = 1000)

然而,rnoaa 的输出是一个看起来像这样的小标题。

$data
# A tibble: 1,000 x 9
   date                datatype station           value fl_m  fl_q  fl_so fl_t  units         
   <chr>               <chr>    <chr>             <int> <chr> <chr> <chr> <chr> <chr>         
 1 2017-03-01T00:00:00 PRCP     GHCND:USC00221389     0 ""    ""    7     0700  mm_tenths     
 2 2017-03-02T00:00:00 PRCP     GHCND:USC00221389   175 ""    ""    7     0700  mm_tenths     
 3 2017-03-03T00:00:00 PRCP     GHCND:USC00221389     0 ""    ""    7     0700  mm_tenths     
 4 2017-03-04T00:00:00 PRCP     GHCND:USC00221389     0 ""    ""    7     0700  mm_tenths     
 5 2017-03-05T00:00:00 PRCP     GHCND:USC00221389     0 "T"   ""    7     0700  mm_tenths     
 6 2017-03-05T00:00:00 TOBS     GHCND:USC00221389    94 ""    ""    7     0700  celcius_tenths
 7 2017-03-06T00:00:00 PRCP     GHCND:USC00221389    18 ""    ""    7     0700  mm_tenths     
 8 2017-03-06T00:00:00 TMAX     GHCND:USC00221389   183 ""    ""    7     0700  celcius_tenths
 9 2017-03-06T00:00:00 TMIN     GHCND:USC00221389    94 ""    ""    7     0700  celcius_tenths
10 2017-03-06T00:00:00 TOBS     GHCND:USC00221389   167 ""    ""    7     0700  celcius_tenths

我想将 tibble 的输出更改为每一行都是一个日期,datatype 中的数据类型现在是一列。所以我会在我的动物搬迁数据集中有每天的降水量、最高温度、最低温度。像这样。

date          PRCP      TOBS      TMAX      TMIN
2017-03-06     5         78         85       72

这样我就可以轻松地将它添加到我的动物搬迁数据集中,看起来像这样。

    ID       date        time          datetime           lat       lon      DOP  Elevation  PRCP   TOBS   TMAX   TMIN
1 333 2017-03-15    2:30:47 AM   2017-03-15 02:30:47   32.73810  -90.15422   3     48.64     5      78     85     72

这样的事情会有帮助吗?

library(tidyverse)
weather$data %>% 
  pivot_wider(id_cols = date,names_from = datatype,values_from = value) %>% 
  separate(date,into = c("date","time"),sep = "T") %>% 
  mutate(date = as.Date(date))

这会给你:

# A tibble: 277 x 6
   date       time      PRCP  TOBS  TMAX  TMIN
   <date>     <chr>    <int> <int> <int> <int>
 1 2017-03-01 00:00:00     0    NA    NA    NA
 2 2017-03-02 00:00:00   175    NA    NA    NA
 3 2017-03-03 00:00:00     0    NA    NA    NA
 4 2017-03-04 00:00:00     0    NA    NA    NA
 5 2017-03-05 00:00:00     0    94    NA    NA
 6 2017-03-06 00:00:00    18   167   183    94
 7 2017-03-07 00:00:00     0   183   256   167
 8 2017-03-08 00:00:00   353    22   222    17
 9 2017-03-09 00:00:00     0   139   222    22
10 2017-03-10 00:00:00    86   150   244   139
# ... with 267 more rows