ちょっとしたメモ

R(RStudio)を使っていく際に、躓いた点などをメモしていきます。また、以降の説明では、RStudioでプロジェクトを作成していることを前提に話を進めます。プロジェクトが何かわからない場合は、 プロジェクトの作成・利用を一度確認してからご覧ください。

Googleフォームで集めたデータ

2021/08/01

COVID-19のあおりで、オンライン講義が増え、質問紙調査もGoogleフォームを用いてオンラインで行うことが多くなってきました。Googleフォームは大変便利ですが、Googleフォームで集めたデータをGoogleスプレッドシートに出力して、それをR(RStudio)で従来のデータフレームとして用いるには、少し工夫が必要になるので、メモを残しておきます。

データの保存形式

基本的には、CSVファイルを推奨しているのですが、Windowsの文字コードとGoogleスプレッドシートの文字コードの関係(*)で、Excelファイルを用いた方が読み込みのトラブルが減りますので、ここではExcelファイルとしてダウンロードして保存することをおすすめします。

Windowsがいい加減にShift-JISを捨ててくれればほとんどのR(RStudio)関係のトラブルはなくなるのに…。

元データだけの保存をおすすめすることは変わりません。解析が進むと、データのサブセットをそれぞれファイルに保存したくなることも多いですが、どのようにサブセットを作ったかは、Rのコードに記述しておいた方が、Reproducibilityが高くなり、後々の見直しに役立ちます。

データの読み込み方

データの読み込みはreadxlパッケージread_excel()関数を使います。


          library(readxl)
          dat = read_excel("data/ファイル名.xlsx")
          dat = as.data.frame(dat)
          ToFactor = c("変数A", "変数B", "変数C")
          dat[, ToFactor] = lapply(dat[, ToFactor], factor)
        

read_excel()関数では、Rのデータフレームではなく、tibble形式として読み込むことになります。時々、今まで普通にやっていた作業で躓くことがあるので、データフレームへの変換も行っています(3行目)。また、Rは、バージョン4.0以降、今までのように文字列をFactorにしてくれません。なので、明示的にFactorに変更することが求められます(4行目、5行目)。Googleフォームでは、回答が文字列で記録されることが多いので、文字列を数値にすることも行いますが、この場合もR 4.0以降では、下記のように変更後の数字を明示的に数値に変更することが求められます。


          ToNum = c("変数1", "変数2", "変数3")
          dat[, ToNum] = lapply(dat[, ToNum], as.numeric)
        

因子データを一括で数値データに変換

2021/08/01


      Chr2Num = function(df, ToNum, mapping){
        # 当てはめる関数
        mapNum = function(strings, mapping) {
          # strings: 変換したい列を含むデータフレーム
          # mapping: 回答と数値の対応についての名前付きベクトル
          if(is.factor(strings)){
            mapping[as.character(strings)]
          } else {
            if(is.character(strings)){
              mapping[strings]
            } else {
              strings
            }
          }
        }
        df[, ToNum] = data.frame(lapply(df[, ToNum], mapNum, mapping))
        df
      }
      

rstanを使う場合

2021/08/01

rstanを使う場合、パッケージのバージョンアップには注意しておいた方が良い。だいたい最新のrstanは最新のR(とRtools)でしか動かないことが多い。理由があってR本体のバージョンアップを見合わせている場合、rstanや関係パッケージのアップデートも控えるようにしましょう(*)。

さもなければ、R本体も一緒にバージョンアップしましょう。