我认为思考之间差异的方法labels
and levels
(忽略labels()
汤米在他的回答中描述的功能)是levels
旨在告诉 R 在输入中查找哪些值(x
)以及在结果级别中使用什么顺序factor
对象,以及labels
是要改变values输入被编码为一个因素后的级别......正如汤米的回答所建议的,没有factor
返回的对象factor()
它被称作labels
...只是级别,已由labels
论证……(清晰如泥)。
例如:
> f <- factor(x=c("a","b","c"),levels=c("c","d","e"))
> f
[1] <NA> <NA> c
Levels: c d e
> str(f)
Factor w/ 3 levels "c","d","e": NA NA 1
因为前两个元素x
没有找到在levels
,前两个元素f
are NA
。因为"d"
and "e"
被包括在levels
,它们出现在以下级别f
即使它们没有发生在x
.
现在与labels
:
> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("C","D","E"))
> f
[1] <NA> <NA> C
Levels: C D E
在 R 找出因子中应包含的内容后,它会重新编码级别。人们当然可以用它来做一些令人费脑筋的事情,例如:
> f <- factor(c("a","b","c"),levels=c("c","d","e"),labels=c("a","b","c"))
> f
[1] <NA> <NA> a
Levels: a b c
另一种思考方式levels
就是它factor(x,levels=L1,labels=L2)
相当于
f <- factor(x,levels=L1)
levels(f) <- L2
我认为这个例子的适当措辞版本可能适合帕特伯恩斯地狱R http://www.burns-stat.com/pages/Tutor/R_inferno.pdf——第 8.2 节中有很多因素谜题,但不是这个特定的谜题……