実現したいこと
以下のことをそれぞれ実行するコードを書いたのだが、実行の完了に非常に時間がかかっている。
元データが膨大なせいか、書いているコードに問題があるのか分からない。
効率的なコードを書きたい。
- 年月日の変数から、年、月、日をそれぞれ抜き出す。
- ID()の変数から、IDを構成する部分を分離する。
- 住所の変数が空白の場合、県コードの変数に"00"を代入する。
前提
データセットの変数は以下の通り。なお、1543万行ある膨大なデータ。
ida : 1つ目のID。10桁の数字。数値。(例:2011473923)
seq : 2つ目のID。1-3桁の数字。数値(例:2)
ida_seq : idaとseqを"_"で接続した変数。文字列。seqは3桁になっている。(例:"2011473923_002")
date :年月日。文字列。yyyy-mm-dd方式。(例:"2011-06-18")
year : 年。数値。(例:2011)
month : 月。数値。(例:6)
day : 日。数値。(例:18)
address : 住所が文字列で入っている。(例:東京都千代田区1丁目1-1)
pref_code : 住所に対応した県コードが2桁の文字列で入っている。(例:"13")
発生している問題
以下のコードを実行しているのだが、実行に時間が非常にかかっている。
遅くなっている原因と、効率化する解決策をもしご存じであれば教えていただきたい。
該当のソースコード
data <- data %>% mutate(year = as.numeric(substr(date,1,4)), month = as.numeric(substr(date,6,7)), day = as.numeric(substr(date,9,10)), ida = as.numeric(substr(ida_seq,1,10)), seq = as.numeric(substr(ida_seq,12,14)), pref_code = if_else(is.na(address),"00",pref_code) )
試したこと
year,day,monthをそれぞれ関数(year())で実行したものの、あまり効率化にはならなかった。
if_else()がdpfyrと相性が悪いと推測して、デフォルトのifelse()にもしてみたが、あまり変わらなかった。
補足情報(FW/ツールのバージョンなど)
使用しているのはRStudio。最新版ではないが3か月前にダウンロードしたもの。
回答3件
あなたの回答
tips
プレビュー