0

パッケージrnoaaを操作して、気象イベントの df に米国のステーション ID を追加します。以下はstr()dfrainです。

サブセットのcsvファイルへのGoogleドライブリンク

'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 ...

rainこれに関係のない一連の変数を省略して、ここにdfのスニペットを示します

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()これはティブルのスニペットです。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、2 つのリストを比較して最も近いステーションにマージするために使用しました。 .

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) 

uisngmemory.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