!因子型の要素を取り出す 因子型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: 信玄 信長 秀吉 家康 この挙動についてr-wakalangで以下のようなことを教わった。 *1:n のintに"変換"する行為である *1:n に対応する要素ベクトルをlevelsで与える *表示をlevelsそのまま以外にしたい場合はlabelsで与える (いうまでもなく、1:nに対応する) *デフォルトでは levels = labels = sort(uniqe(対象)) である {{category オブジェクト操作}}