Translate

2020年1月26日日曜日

◆「R」コード 実戦Tips :インフルエンザの「定点当たり報告数」のデータ更新時に便利な「eval()関数」

 週別に年ごとの推移のグラフを作成する場合、「週」の変数を指定します。例えば、第2週では「df_inf$W02」、第3週では「df_inf$W03」というように、データを更新する際にコードの中の変数名を書き換える必要があります。

Weekts <- ts(df_inf$W03,start=c(2009,1), frequency = 1)
plot(Weekts)

 それはそれで、いいのですが、もっとわかりやすく、間違えることが少ない方法を探ってみました。できれば、命令文中の変数名を書き換えたくありません。

 もし、文字列を変数名として利用することができれば、文字列に当該週の数字を入れることで、週単位のデータ更新がしやすくなるはずです。

 このように、変数名に連番の要素があり、連番の指定で変数名を指定できれば便利になります。

 しかし、いろいろと調べても、「変数名の文字列」を「変数名として利用する」方法は見つかりませんでした。何か方法はあるのかもしれませんが。 

 とりあえず、文字列を命令文として利用できるeval()関数というものがありましたので、変数名の文字列を含んだ文字列全体を命令文にすることによって、所期の目標を達成できました。

 「大(命令文全体の文字列)は、小(命令文中の変数名の文字列)を兼ねる」といった感じです。


 まず、wnumという変数に、当該週の数字「03」を代入し、「W03」という文字列を作成し、xwという変数に代入します。

wnum <- "03"
xw <- paste0("W", wnum, sep = "")

wnumt <- 3

 下記の、eval()関数の中に、命令文の文字列全体を入れていますが、「get(xw)」という形で、「W03」という文字列を反映させています。wnumに「04」を代入すれば、「W04」になるので、第4週のデータに更新する場合は、「wnum <- "04"」とすればいいことになります。
 
eval(parse(text = paste("Weekts <- ts(df_inf$",get(xw), ",start=c(2009,1), frequency = 1)")))

eval(parse(text = paste("plot(Weekts,xlab='year',ylab='定点当たり報告数',main='各年のインフルエンザ:第",wnumt,"週の推移')")))

  下記のグラフの更新が、「読み込むデータの更新」と「wnum <- "03"」「wnumt <- 3」の数字の更新だけで可能になりました。



 これで、データ更新時に、命令文中の変数名を変更しなくて済みます。

 また、別のところで、グラフ化するデータを「第n週まで」に絞り込む必要があるので、「wnumt」はその場合にも利用できます。

df_inftidys4 <-  df_inftidys4 %>% filter(week_n >= 36 | week_n <= wnumt)

◆新型コロナウイルス感染者の日ごとの推移のグラフを作成する「R」のコード例

グラフのデータは、Kaggleの「Novel Corona Virus 2019 Dataset」のcsvファイルに、「JJohns Hopkins university」のダッシュボードの最新データを追加したものです。


----------------------------------------------------


---------------------------------------------------

0 件のコメント:

コメントを投稿