factorのレベルをそろえたい
R言語の中でfactor(因子型)は数値として扱われており、外っつらが同じでも中が異なる場合があるので注意が必要だ。
例えば
>|r| > rlove <- c("R", "L", "O", "V", "E") > x <- factor(rlove) > x [1] R L O V E Levels: E L O R V > as.numeric(x) [1] 4 2 3 5 1 > y <- factor(rlove, levels=LETTERS[-(1:4)]) > y [1] R L O V E Levels: E F G H I J K L M N O P Q R S T U V W X Y Z > as.numeric(y) [1] 14 8 11 18 1
な感じで、そとっつらはどちらも"RLOVE"と見えるが、中に入ってる数値は異なるのである。
このレベルを揃えたい時には、そろえたい側のlevelを引数として再度factorとしてやる。
x <- factor(x, levels=levels(y))
結果は
> x <- factor(x, levels=levels(y)) > as.numeric(x) [1] 14 8 11 18 1
でちゃんと同じにそろった。
あるいはある文字だけ追加したい場合は
factor(c("hoge", make.names(x)))[-1] > factor(c("hoge", make.names(x)))[-1] [1] R L O V E Levels: E hoge L O R V
なんて書いてもいい。
うっかりすると間違えるポイントである。