[英]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.