2017-03-12 8 views
0

melt()関数を使用してワイドフォーマットからロングフォーマットに変換した後、カテゴリ変数をRの係数に変換しようとしています。しかし、因子関数と入力レベルとラベルを実行すると、次の表が得られます。生成要因に関する問題R

これはなぜ起こっているのですか?

law <- read.csv("lawyers_class_new.csv") 


library(reshape2) 
law <- melt(law, id.vars = c("Subj"), measure.vars = c("lawyer", "neutral", "engineer", "neutral_urb", "neutral_rur")) 
law <- law[order(law$Subj),] 
law <- within(law, 
       Subj <- factor(Subj), 
       variable <- factor(variable) 
      ) 
law$variable<- ordered(law$variable,levels=c(1,2,3,4,5),labels=c("lawyer","neutral", 
    "engineer","neutral_urb","neutral_rur")) 


Output: 

law$variable 
    [1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>  <NA> <NA> <NA> <NA> 
[18] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[35] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[52] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[69] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[86] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[103] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[120] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
[137] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 

溶融データフレーム:

**Subj Cond variable value** 
1   2  lawyer  3 
1   3  neutral  1 
1   1  engineer  3.5 
1   5  neutral_urb 3 
1   4  neutral_rur 3.5 
2   2  lawyer  1 
2   3  neutral  3.5 
2   1  engineer  4.5 
2   5  neutral_urb 2 
2   4  neutral_rur 3.5 

元のデータFRAME:

Subj lawyer neutral engineer neutral_urb neutral_rur 
1   3  1  3.5   3   3.5 
2   1  3.5  4.5   2   3.5 
+1

再現可能な例を作成してください。私たちはlawyers_class_new.csvにアクセスすることはできません。 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+1

レベルは、順序付けられた要素への2回目の変換で「1:5」ではないようです。レベルの引数は、*因子レベルが*と表示されるべきもので、ラベルは他のものに変更したい場合にのみオプションです。 – Gregor

+0

また、あなたの目標はわかりませんが、プロットなどの特定の順序でレベルを持つためには、順序付けられた要素が必要であると誤って考える人が多いです。そうではありません。 'ordered'因子の唯一の理由は、モデリングの際に使用されるコントラストのためです。 – Gregor

答えて

0

誤差を最小限に抑えるために、私は要因として、文字列をインポートしないだろうし、withinを使用することはないようです法律$変数の要因を適切に作成する。したがって、正しい順序を保証するために、このような要素を指定します。

law <- read.table(text="Subj Cond variable value 
1   2  lawyer  3 
1   3  neutral  1 
1   1  engineer  3.5 
1   5  neutral_urb 3 
1   4  neutral_rur 3.5 
2   2  lawyer  1 
2   3  neutral  3.5 
2   1  engineer  4.5 
2   5  neutral_urb 2 
2   4  neutral_rur 3.5", header=TRUE, stringsAsFactors=FALSE) 

law <- law[order(law$Subj),] 

law$Subj <- as.factor(law$Subj) 
law$variable <- factor(law$variable,levels =c("lawyer","neutral", 
    "engineer","neutral_urb","neutral_rur")) 

str(law) 
'data.frame': 10 obs. of 4 variables: 
$ Subj : Factor w/ 2 levels "1","2": 1 1 1 1 1 2 2 2 2 2 
$ Cond : int 2 3 1 5 4 2 3 1 5 4 
$ variable: Factor w/ 5 levels "lawyer","neutral",..: 1 2 3 4 5 1 2 3 4 5 
$ value : num 3 1 3.5 3 3.5 1 3.5 4.5 2 3.5 
関連する問題