井出草平の研究ノート

Phindでリコードのコードを書く[R]

統計の分野の人がリコードと呼ぶ作業をPhindで実験してみた。リコードという呼び方は方言(ジャーゴン)だそうで、プログラミングの分野ではnormalizeかcanonicalizeと呼ぶらしい。統計でnormalizeというと正規分布を用いて0から1までの数字にすることなどを指すことが多いので、まだまだ難しい問題が横たわっている。少なくとも、現在のAIでは詳しく作業内容(プロンプト)を説明しないといけない。

Phindのコマンド

Rのコードを作成してください。 dataというデータフレームにtimeという変数が入っており、データタイプはnumeric型です。 値は1から7までの値をとります。dplyrパッケージを用いて、 値1を0.5に、2を0.75、3を1.5、4を2.5、5を3.5、6を4.5、7を欠損値に書き変えるコードを書いてください。

library(dplyr)
data %>%
  mutate(time = case_when(
      time == 1 ~ 0.5,
      time == 2 ~ 0.75,
      time == 3 ~ 1.5,
      time == 4 ~ 2.5,
      time == 5 ~ 3.5,
      time == 6 ~ 4.5,
      time == 7 ~ NA_real_
    )
  )

見事に書けている。
欠損値の指定、NA_real_までしっかり書かれてある。

ちなみに、Rのリコードはmemiscパッケージ、carパッケージで行うと書いているものが多く、僕も過去のエントリでもこの2つのパッケージを紹介したことがあるが、この選択は間違いだ。memisccarはデータラベルを書き換えるだけで、データそのものを置き換えていない。view()コマンドで確認しても、表示されているのはデータラベルであり、データそのものが置き換わっているかは確認できないため、この2つのパッケージの挙動を理解せずに使っている人が非常に多い。

Rではデータラベルを拾って計算する(おせっかいな)パッケージが多く、そのパッケージでは意図した分析ができるが、データを拾って計算するパッケージでは誤った結果が出るため、リコードにmemisccarは使うべきではない。データそのものを置きかえられるdplyrを使うべきである。