我正在尝试使用 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。
我做错了什么?
答案 0 :(得分:2)
我不确定这里发生了什么。您的问题中没有足够的信息可讲。 (你可能想要阅读这个帖子: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
。