5

我正在尝试使用指令relevel将参考类别重新定义为最后一个类别。

起初,我收到一个错误:

base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))  
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

我使用 Epicalc 包的des指令来检查 DPROS 是数字还是因子:

des(base1)

No. of observations =  380   
  Variable      Class           Description  
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         numeric                    
4 DCAPS         numeric                    
5 PSA           numeric  

我使用as.factor使 DPROS 成为一个因素。

DPROS <- as.factor(DPROS)

但我仍然遇到同样的错误:

base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))  
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

使用des它仍然说 DPROS 是数字,但is.factor(DPROS)返回 TRUE。

我究竟做错了什么?

4

1 回答 1

5

我不确定这里发生了什么。您的问题中没有足够的信息可以说明。(您可能想阅读此主题:how-to-make-a-great-r-reproducible-example,并编辑您的 Q,特别是如果我下面的回答没有帮助。)另外,我怀疑您有错字

    DPROS <- as.`enter code here`factor(DPROS)  

我假设你的意思是:DPROS <- as.factor(DPROS)

一种可能性是您附加了数据框。考虑:

> set.seed(9)
> base1 = data.frame(CAPSULE=rnorm(100), AGE=rnorm(100), 
+                    DPROS=as.numeric(sample(1:4, 100, replace=T)),
+                    DCAPS=rnorm(100), PSA=rnorm(100))
> attach(base1)
> des(base1)

 No. of observations =  100 
  Variable      Class           Description
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         numeric                    
4 DCAPS         numeric                    
5 PSA           numeric    

> base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

> DPROS <- as.factor(DPROS)
> base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))
Error in relevel.default(DPROS, ref = 4) : 'relevel' only for factors

> des(base1)

 No. of observations =  100 
  Variable      Class           Description
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         numeric                    
4 DCAPS         numeric                    
5 PSA           numeric                    

> is.factor(DPROS)
[1] TRUE

这重现了您描述的行为,据我所知,您发生了什么事。

如果您尝试以下操作,您会发现它可以正常工作:

> base1 <- within(base1, DPROS <- as.factor(DPROS))
> des(base1)

 No. of observations =  100 
  Variable      Class           Description
1 CAPSULE       numeric                    
2 AGE           numeric                    
3 DPROS         factor                     
4 DCAPS         numeric                    
5 PSA           numeric                    

> base1 <- within(base1, DPROS <- relevel(DPROS, ref = 4))

如果发生这种情况,则它是附加数据框在 R 中工作方式的固有部分。您可以更改已附加的变量,而无需更改数据框中的实际变量。正如@GavinSimpson 所说,通常最好避免使用attach.

于 2013-06-09T18:57:32.103 回答