簡體   English   中英

Hmisc包將原始代碼從0:1更改為1:2

[英]Hmisc package changes original codes from 0:1 to 1: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變量,以便以后進行回歸。 謝謝

這與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',''levels“屬性為'character'和unique('!anyDuplicated(。)')條目。 如果參數'ordered'為真(或使用'ordered()'),則結果具有類'c(“ordered”,“factor”)'。

因此,當您對變量a使用factor時,0和1值將替換為您給出的“是”和“否”。 在內部,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

正如朱巴的回答所解釋的那樣,這是因素的預期運作方式。 但是,如果您確實需要描述性因子標簽和原始數值,則可以將值添加為因子的屬性,例如,

> 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
> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM