2013-03-02 21 views
2

我使用Hmisc簽署因子名和變量名,它是非常方便的。 但是我發現這裏有一個問題是下面的編碼代碼Hmisc包改變原始代碼從0:1至1:2

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變量後迴歸的目的。 感謝

+0

請downvote,標題是不準確的,答案在文檔中明確提出。 – Ista 2013-03-03 04:25:52

回答

3

朱巴的回答解釋說,這是一個因素,工作預期的方式。但是,如果你真的想都描述性因素的標籤和原來的數值您可以添加值作爲要素的屬性,例如,

> 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 
> 
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幫助頁面解釋 整數代碼的「X」的長度與「‘水平’」模式 「字符」的屬性和獨有的(「!anyDuplicated(。)」)的條目。如果參數 「有序」是真實的(或「排序()」時)的結果具有類 「C(‘有序’,‘因子’)」。

所以,當你對你的變量a,0和1的值被替換使用factor由「是」和「否」你給。從內部來說,R在計算事物時並不處理這些級別,而是對它們賦予的底層整數值。這就是爲什麼您在str的輸出中看到1和2的一系列值。 這些整數值供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 

注意,即使在這種情況下,你仍然會使用str時,讓你的潛在1/2值:

R> str(factor(a,labels=c("0","1"))) 
Factor w/ 2 levels "0","1": 2 1 2 1 2 1 2 1 2 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