2

因子名と変数名の署名には Hmisc を使用していますが、これは非常に便利です。しかし、ここで問題が見つかったのはコードです

a <- c(1,0,1,0,1,0,1,0,1,0)
b <- c("a","b","a","b","a","b","a","b","a","b")
df.new <- data.frame(a,b)
library(Hmisc)
df.new.1 <- upData(df.new,lowernames=TRUE,a=factor(a,labels=c("No","Yes")),b=factor(b,labels=c("No","Yes")))

文字ベクトルの場合、次のコーディングとラベルを指定します

str(df.new.1$b)

 Factor w/ 2 levels "No","Yes": 1 2 1 2 1 2 1 2 1 2

、これで問題ありません。

最初のケースで str を使用してコーディングとラベルを探すと、

str(df.new.1$a)

 Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1 2 1 2 1 ,

これは奇妙です!元の 0 1 コーディングはなくなりました。この問題を解決するにはどうすればよいですか? 後で回帰するために、元の 0 1 変数を保持したいと思います。ありがとう

4

2 に答える 2

6

これはとは何の関係もありませんHmisc。これは、ベースRでファクターが作成される方法です。

R> a <- c(1,0,1,0,1,0,1,0,1,0)
R> factor(a,labels=c("No","Yes"))
 [1] Yes No  Yes No  Yes No  Yes No  Yes No 
Levels: No Yes
R> str(factor(a,labels=c("No","Yes")))
 Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1 2 1 2 1

?factorヘルプページで説明されているように:

'factor'は、クラス'"factor"'のオブジェクトを返します。このオブジェクトは、長さ'x'の整数コードのセットとモード'文字'およびunique('!anyDuplicated(。)')の'"levels"'属性を持ちます。エントリ。引数'ordered'がtrueの場合(または'ordered()'が使用されている場合)、結果のクラスは' c( "ordered"、 "factor")'になります。

したがってfactor、変数aでを使用すると、0と1の値は、指定した「はい」と「いいえ」に置き換えられます。内部的には、Rは計算時にレベルを操作しませんが、Rがそれらに起因する基本的な整数値を操作します。そのため、の出力に一連の1と2の値が表示されますstr。これらの整数値はRが内部で使用するためのものであり、実際に気にする必要はありません。

0と1の値を追跡したい場合は、たとえば変数を整数として保持することでそれらを保持できます。または、本当に係数が必要な場合は、「0」と「1」で定義できます。レベル:

R> factor(a,labels=c("0","1"))
 [1] 1 0 1 0 1 0 1 0 1 0
Levels: 0 1

この場合でも、以下を使用すると、基礎となる1/2の値が得られることに注意してくださいstr

R> str(factor(a,labels=c("0","1")))
 Factor w/ 2 levels "0","1": 2 1 2 1 2 1 2 1 2 1

もう1つの方法は、レベルを「はい」、「いいえ」から「0」、「1」に直接変更することです。あなたはlevels()例えば関数でそれをすることができます:

R> v <- factor(a,labels=c("No","Yes"))
R> v
 [1] Yes No  Yes No  Yes No  Yes No  Yes No 
Levels: No Yes
R> levels(v) <- c("0","1")
R> v
 [1] 1 0 1 0 1 0 1 0 1 0
Levels: 0 1
于 2013-03-02T22:17:09.757 に答える
3

juba's answer が説明しているように、これは因子が機能するために期待される方法です。ただし、説明的な因子ラベルと元の数値の両方が本当に必要な場合は、因子の属性として値を追加できます。

> a <- c(1,0,1,0,1,0,1,0,1,0)
> tmp <- a
> a <- factor(a, labels=c("No","Yes"))
> attr(a, "values") <- tmp
> a
 [1] Yes No  Yes No  Yes No  Yes No  Yes No 
attr(,"values")
 [1] 1 0 1 0 1 0 1 0 1 0
Levels: No Yes
> str(a)
 Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1 2 1 2 1
 - attr(*, "values")= num [1:10] 1 0 1 0 1 0 1 0 1 0
> attributes(a)$values
 [1] 1 0 1 0 1 0 1 0 1 0
> 
于 2013-03-02T22:36:12.937 に答える