2016-10-05 1 views
0

memsciでdata.setをインポートした後(これは非常にうまくいきました!:))、私は現在、データの(順序付けられていない)ファクタに変換されますが、レベルは1,2,3,4,5ではありません(これは計算に必要な値です)。まったく "。文字の名前を持つ要素を数値に変換する(.savファイルからインポートした後)

これは、因子を数値に変換するのにas.numeric(levels(f))[f]を使用できないという問題につながります。

私はこれを使用し、私のデータをインポート取得するには:

data <- as.data.set(spss.system.file("data.sav")) 
dat <- as.data.frame(data) 

しかし:情報があるようです。

str(var1) 

Factor w/ 5 levels "don't agree at all",..: NA 1 1 1 1 1 1 1 1 1 ... 

labels(dat$var1) 
    [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" 
[13] "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" 

levels(dat$var1) 
[1] "do not agree at all" ". ."    ". . ."   
[4] ". . . ."   "fully agree" 

ここで値は保存されていますか?私はlabels(var1)とちょうどvar1を試しましたが、どちらも動作しません。ただし、as.numeric(var1)を使用すると、必要な情報が得られますが、要因についてはRヘルプに記載されているようにこれを適用する必要はありません。また、dat[,1:ncol(dat)] <- lapply(dat[,1:ncol(dat)], function(x) as.numeric(x)) を使用した後でも、変数は依然として要因とみなされ、前とまったく同じように動作します。

編集:再現例感謝

var1 <- factor(c(1,2,3,4,5,5,4,3,2,1), 
       levels = as.character(1:5), 
       labels = c("Fully agree", "....", "...", "..", "Do not agree at all")) 
+1

他の人があなたの問題を再現できるように再現可能な例を投稿してください。 – Nate

+0

'as.numeric(var1)'を試してみてください。 – cccmir

+0

私は実際に再現可能な例を投稿できません。私の理解から、1つのコードは次のようになります: 'var1 < - factor(c(1,2,3,4,5,5,4,3,2,1)、 levels = c("完全一致"、" .... "、" ... "、" .. "、"全く同意しない ")、 labels = as.character(1:10))' これは動作するコマンドではありません。しかし私にとっては、このようにデータが作成されたように見えます。 – Susu

答えて

1

を@jakubするためにあなたが言う:

as.numeric(var1)は私が必要とする情報を提供しますが、私はで述べたように、1つは、これを適用すべきとは思いません要因

のためのRヘルプあなたはを参照する場合:

特に、因子に適用されるas.numericは無意味であり、暗黙の強制によって起こる可能性があります。

あなたはおそらく2つの問題を混乱させるでしょう。 ラベルを入力するか、レベルを入力します。

因子のラベルとなる数値がある場合は、実際にはas.numeric(levels(f))[f]を使用して数値に変換する必要があります。例:

var1 <- factor(c(1,2,3,1), 
       labels = c("123", "5", "-11"), 
       levels = as.character(1:3)) 
levels(var1) 
# [1] "123" "5" "-11" 
as.numeric(var1) 
# [1] 1 2 3 1 #this indeed does not make much sense - the values are lost! 
as.numeric(levels(var1))[var1] 
#[1] 123 5 -11 123 

しかし、あなたの場合には、これは適用されません、(私が正しく理解している場合)ので、あなたはラベルが、基礎となる整数を望んでいません。あなたにとっては、Fully agree1を意味します。この場合、as.numeric(var1)は問題ありません。

+0

何らかの理由で 'var1 < - as.numeric(var1)'と言ったところであなたはちょうどその場にいます。私のdata.setのような例でうまくいきます。 **しかし、**私は私のデータセットでそれを使用する場合、ワークスペースに数値として表示されますが(var1) 'is.factor(var1)'の間に 'is.numeric(var1)'はまだ 'FALSE'です。 TRUEです。私は本当に理由を知りませんし、なぜas.numericもこの場合には使用すべきではないと仮定しました。それは、data.setからdata.frameへの変換に関連していますか?しかしそれは奇妙に思える。 – Susu

+0

私は 'data.set'に慣れていません。しかし、 'dat $ var1 = as.numeric(dat $ var1)'と 'class(dat $ var1)'を呼び出すとどうなりますか? – jakub

+0

私は間違いを発見しました。私は以前に 'attach(dat) 'を使ってきました。これは 'str(var1)'を使ってそれが数値になったことを確認するときに何の変化も生じません。 'attach(dat)'を再実行した後、または使用していない場合、実際には正しく数値として表示されます。これは奇妙なことですか?私はいつも間違って使っていますか? o_o とにかく大きな助けをいただき、ありがとうございました。私はあなたの答えを正しいものとしてマークしました! – Susu

関連する問題