- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!因子型の要素を取り出す
因子型Factorの中身を見たいときに使う。
levels(df$field)
例えば、仕訳データで勘定科目一覧を取り出すなどで使える。
但し、デフォルトでは文字コードの順番に出力されるはずである。
例えば、
Cr Dr # アルファベットの順
female male # アルファベットの順
秋・夏・春・冬 # 漢字の文字コード順
などの順番で出てくると使いづらい(男女の順序については異論があるかもしれないが。)。
勘定科目などは、漢字コードの順番ではなく、資産・負債・純資産の順番(つまり科目コード順)で出てほしい。
実は因子型のデータの実態は整数型なので、順番を与えることもできる。
df$field <- factor(field, levels=c("春","夏","秋","冬"))
とすれば、fieldの値に因子の順序を与えることができる。都道府県名を北から南に向かって並べるなどの時にも使える。
なお、通常は何らかのベクトルが既に存在し、それをそのまま使うか何らか並べ替えて使うことが多いだろう。
上の季節の順序に相当する部分を逆順にしたいときは、rev()をつかって入れ替える。
factor(field, levels = rev(c("春","夏","秋","冬"))
!具体例
*デフォルトでは与えたデータがそのままの順で表示され、裏で文字コード順に整数がLevelとして割り当てられる。
> factor(c("徳川","織田","武田","豊臣"))
[1] 徳川 織田 武田 豊臣
Levels: 織田 徳川 武田 豊臣
*与える整数をなにかの順序で整頓したい場合、その順序をlevelsで与えてやる。
表示は依然として入力順だが、裏のLevelが上の文字列順とは異なっている。
> factor(c("徳川","織田","武田","豊臣"), levels=c("武田","織田","豊臣","徳川"))
[1] 徳川 織田 武田 豊臣
Levels: 武田 織田 豊臣 徳川
*表示名(ラベル)を含めて変更したい場合、与えるLevelに合わせてLabelを与える。
表示されているものが元のデータではなくラベルになっている(依然として並びは入力順)
表示されているものが元のデータではなくラベル表示になっている(依然として並びは入力順だが)
> factor(c("徳川","織田","武田","豊臣"), levels=c("武田","織田","豊臣","徳川"), labels=c("信玄","信長","秀吉","家康"))
[1] 家康 信長 信玄 秀吉
Levels: 信玄 信長 秀吉 家康
> factor(c("徳川","織田","武田","豊臣"), levels=c("武田","織田","豊臣","徳川"), labels=c("信玄","信長","秀吉","家康"))
[1] 家康 信長 信玄 秀吉
Levels: 信玄 信長 秀吉 家康
この挙動についてr-wakalangで以下のようなことを教わった。
*1:n のintに"変換"する行為である
*1:n に対応する要素ベクトルをlevelsで与える
*表示をlevelsそのまま以外にしたい場合はlabelsで与える (いうまでもなく、1:nに対応する)
*デフォルトでは levels = labels = sort(uniqe(対象)) である
{{category オブジェクト操作}}