0

使用rnoaa包将美国站 ID 添加到天气事件的 df 中。下面是str()df rain

谷歌驱动器链接到子集的 csv 文件

'data.frame':   4395 obs. of  63 variables:
 $ YEAR               : int  2009 2009 2012 2013 2013 2015 2007 2007 2007  
 $ msa_code           : int  29180 29180 29180 12260 12260 12260 23540 23540  
 $ zip                : int  22001 22001 22001 45003 45003 45003 12001 12001 
 $ state              : chr  "LA" "LA" "LA" "SC" ...
 $ gdp                : int  23495 23495 27346 20856 20856 22313 10119 10119 
 $ EVENT_TYPE         : chr  "Heavy Rain" "Heavy Rain" "Heavy Rain" "Heavy 
 $ WFO                : chr  "LCH" "LCH" "LCH" "CAE" ...
 $ latitude           : num  30.4 30.2 30.2 33.4 33.5 ...
 $ longitude          : num  -92.4 -92.4 -92.2 -81.6 -81.9 ...
 $ SUM_DAMAGES        : num  0 0 0 0 0 0 0 0 0 0 ...

省略了一堆与此无关的变量,这是raindf的片段

X CZ_NAME YEAR full state name msa_code msa_name.x    zip
49  ACADIA 2009 LOUISIANA      29180    Lafayette, LA 22001
60  ACADIA 2009 LOUISIANA      29180    Lafayette, LA 22001
91  ACADIA 2012 LOUISIANA      29180    Lafayette, LA 22001
761 AIKEN  2013 SOUTH CAROLINA 12260    Augusta-Richmond County, GA-SC 45003
770 AIKEN  2013 SOUTH CAROLINA 12260    Augusta-Richmond County, GA-SC 45003
809 AIKEN  2015 SOUTH CAROLINA 12260    Augusta-Richmond County, GA-SC 45003
latitude longitude
-92.4200 30.4300 
-92.3700 30.2200 
-92.2484 30.2354 
-81.6400 33.4361 
-81.8800 33.5400
-81.7000 33.5300

这是ghcnd_stations()tibble的片段,rnoaa文档建议分配它,这样就不必每次都调用它。

# A tibble: 6 × 11
       id latitude longitude elevation state                          name
    <chr>    <dbl>     <dbl>     <dbl> <chr>                         <chr>
1 US009052008  43.7333  -96.6333       482    SD SIOUX FALLS (ENVIRON. CANADA)
2 US009052008  43.7333  -96.6333       482    SD SIOUX FALLS (ENVIRON. CANADA)
3 US009052008  43.7333  -96.6333       482    SD SIOUX FALLS (ENVIRON. CANADA)
4 US009052008  43.7333  -96.6333       482    SD SIOUX FALLS (ENVIRON. CANADA)
5 US10adam001  40.5680  -98.5069       598    NE                 JUNIATA 1.5 S
6 US10adam001  40.5680  -98.5069       598    NE                 JUNIATA 1.5 S
# ... with 5 more variables: gsn_flag <chr>, wmo_id <chr>, element <chr>,
#   first_year <int>, last_year <int> 

到目前为止,我已经能够使用该ghcnd_stations()命令调用站点列表,然后在删除非 CONUS 站点后,获取这些站点的纬度/经度坐标,fuzzyjoin::geo_inner_join用于比较两个列表并合并最近的站点.

subset <- head(rain)
subset_join <- geo_inner_join(subset, stations, by = c("latitude", "longitude"), max_dist = 5)

我获取了我的数据的一个子集并尝试运行它并且它可以工作,但是当我尝试在整个数据集上运行该代码时,我遇到了memory.size错误:

Error: cannot allocate vector of size 2.9 Gb
In addition: Warning messages:
1: In fuzzy_join(x, y, multi_by = by, multi_match_fun = match_fun,  :
  Reached total allocation of 8017Mb: see help(memory.size) 

我已经尝试过 uisng memory.size = 9000,并尝试阅读有关增加内存大小的信息,但我仍然收到错误消息。memory.size(max = TRUE)返回这个:

> memory.size(max = TRUE)
[1] 7013

有没有更有效的方法来做到这一点,还是我必须将我的 df 切片,运行代码,然后rbind重新组合在一起?

只是为了上下文,这里是sys.info()

Sys.info()
      sysname           release           version          nodename 
    "Windows"        ">= 8 x64"      "build 9200" "DESKTOP-G88LPOJ" 
      machine             login              user    effective_user 
     "x86-64"           "franc"           "franc"           "franc" 

第一个问题!如果我没有包含任何相关内容,请告诉我。谢谢!

4

0 回答 0