Raf*_*yan 2 label r levels hmisc
我使用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")))
Run Code Online (Sandbox Code Playgroud)
对于字符向量,给出以下编码和标签
str(df.new.1$b)
Factor w/ 2 levels "No","Yes": 1 2 1 2 1 2 1 2 1 2
Run Code Online (Sandbox Code Playgroud)
,这很好.
当您在第一种情况下使用str查找编码和标签时,它会给出
str(df.new.1$a)
Factor w/ 2 levels "No","Yes": 2 1 2 1 2 1 2 1 2 1 ,
Run Code Online (Sandbox Code Playgroud)
这很奇怪!原始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
Run Code Online (Sandbox Code Playgroud)
如?factor帮助页面中所述:
'factor'返回类''factor''的对象,它有一组整数代码,长度为'x',''levels"属性为'character'和unique('!anyDuplicated(.)')条目.如果参数'ordered'为真(或使用'ordered()'),则结果具有类'c("ordered","factor")'.
因此,当您factor对变量使用时a,0和1值将替换为您给出的"是"和"否".在内部,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
Run Code Online (Sandbox Code Playgroud)
请注意,即使在这种情况下,使用时仍会获得基础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
Run Code Online (Sandbox Code Playgroud)
另一种方法是直接将您的等级从"是","否"改为"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
Run Code Online (Sandbox Code Playgroud)