S-PLUS mini course の25回目をお届けします。
東京ではここのところ毎日天気が悪く、ぱっとしない日が続きますが皆様お元気でいらっしゃいますか?
まず、お知らせです。
*******************************************************
新しいバージョン、S-PLUS 6.1 for Windows がリリースされました!
詳しくは
http://www.msi.co.jp/splus/
をご覧ください。
お問い合わせは splus-info@ml.msi.co.jp まで、お気軽にどうぞ。
*******************************************************
なお、S-PLUS 特別セミナー「S-PLUS GUIで始める調査データ処理の基礎 - アンケートデータの集計と検定−」はおかげさまを持ちまして、満員となりました。
ご要望が多いようなので、次回の開催も予定しています。
今回日程が合わずご参加いただけなかった方、気がついたときにはすでに満員で間に合わなかった方、大変恐れ入りますが、次回のご参加をご検討いただけますと幸いです。
さて、前回は回帰分析の説明変数に因子があったときに使うダミーが
options によってどのように変わるかをご紹介しました。
ここで、ちょっと因子について触れたいと思います。
例えば、次のようなデータを作ると
data <- data.frame(x=1:10, y=letters[1:10])
data$x は数値ですが、data$y は character ではなくて、factor になります。これは例えば、外部ファイルをインポートしたときや
read.table で読み込んだときも同様です(バージョンによっては文字列を因子ではなく、文字列として読み込む設定にできることがあります)。
因子だから問題が起こる、ということはあまりありませんが、人の名前など、一意な文字だと、属性の因子水準が大きくなって不便なこともあります。文字列に直すには
mode(data$y)<-"character"
あるいは
data$y<-as.character(data$y)
で、強制的に文字列にしてください。
デフォルトの場合、アルファベット順になります。
data <- data.frame(x=1:10, y=letters[1:10])
levels(data$y)
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
これを、任意の順番にするには
data$z <- factor(data$y, levels=rev(letters[1:10]))
と、関数 factor の引数 levels で指定します。
決して
levels(data$y) <- rev(letters[1:10])
としないでくださいね(文字そのものが置換されてしまいます)。
どういうことか、例えばアンケートなどでよくありますよね
1: はい
2: いいえ
3: どちらでもない
で、
x <- factor(c(1, 3, 2, 3, 3, 1))
as.numeric(x)
[1] 1 3 2 3 3 1
と、みたまんまの数字に変換されますが、順序を考えて「はい」「どちらでもない」「いいえ」にしたときは、
x <- factor(c(1,3, 2, 3, 3, 1), levels=c(1, 3, 2))
as.numeric(x)
[1] 1 2 3 2 2 1
元の x とは異なる数字になります。
つまり、「みたままの数字」ではなく「因子水準」に変換されます。
これを避けるには、一旦文字列にします。
as.numeric(as.character(x))
[1] 1 3 2 3 3 1
因子水準が 1, 2, 3, ..., 9, 10, 11 のように、2桁の数値になっている場合は特に注意してください。この場合の因子水準は1, 10, 11,
2,というアルファベット順となります。
次回は因子について、もう少しご説明したいと思います。
お楽しみに!