gpt4 book ai didi

r - 为什么因子中标签和水平的术语如此奇怪?

转载 作者:行者123 更新时间:2023-12-03 08:28:27 26 4
gpt4 key购买 nike

不可设置函数的一个例子是 labels .您只能在使用因子函数创建因子标签时设置因子标签。没有labels<-功能。并不是说因子中的“标签”和“水平”有任何意义......

>  fac <- factor(1:3, labels=c("one", "two", "three"))
> fac
[1] one two three
Levels: one two three
> labels(fac)
[1] "1" "2" "3"

好的,我要求提供标签,人们可能会认为标签是由因子调用设置的,但我得到了一些非常......这个词是什么,不直观?
> levels(fac)
[1] "one" "two" "three"

所以看起来设置标签实际上是设置级别。
>  fac <- factor(1:3, levels=c("one", "two", "three"))
> levels(fac)
[1] "one" "two" "three"

好的,正如预期的那样。那么当一个级别设置时标签是什么?
>  fac <- factor(1:3, levels=c("one", "two", "three"), labels=c("x","y", "z") )
> labels(fac)
[1] "1" "2" "3"
> levels(fac)
[1] "x" "y" "z"

如果你问我,效果很奇怪。似乎因子的“标签”参数胜过任何级别规范的“级别”参数。为什么会这样?似乎是一个困惑的术语。为什么 labels()返回我想象中用 as.character(as.numeric(fac)) 检索的内容?

(这是在我被要求转向一个问题的先前关于赋值函数的答案中的切线评论[标记为这样]。所以这是你启发我的机会。)

最佳答案

我想的方式labels的区别和 levels (忽略汤米在他的回答中描述的 labels() 函数)是 levels旨在告诉 R 在输入( x )中查找哪些值以及在结果 factor 的级别中使用什么顺序对象,和 labels是在输入被编码为一个因子之后更改级别的值......正如汤米的回答所建议的那样,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的前两个元素是 NA .因为 "d""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

另一种思考方式 levelsfactor(x,levels=L1,labels=L2)相当于
f <- factor(x,levels=L1)
levels(f) <- L2

我认为这个例子的适当措辞版本可能适合 Pat Burns 的 R inferno -- 第 8.2 节中有很多因素谜题,但不是这个特定的谜题......

关于r - 为什么因子中标签和水平的术语如此奇怪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com