不可设置函数的一个例子是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"

好的,我要了标签,人们可能会认为标签是由factor call设置的,但我得到了一些非常...什么词,不直观?

> 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()会像我想象中的那样被回收.字符(如数字(fac))?

(在早些时候的一个关于赋值函数的回答中,这是一个无关紧要的 comments (被贴上了这样的标签),我被要求转移到一个问题上来.所以,这是你给我启发的机会.)

推荐答案

我认为思考labelslevels之间的区别(忽略Tommy在回答中描述的labels()函数)的方式是,levels旨在告诉R在输入(x)中寻找哪些值,以及在结果factor对象的级别中使用什么顺序,labels是在输入被编码为一个因子后,改变values个级别...正如Tommy的回答所暗示的,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

另一种思考levels的方式是factor(x,levels=L1,labels=L2)相当于

f <- factor(x,levels=L1)
levels(f) <- L2

我认为,对于Pat Burns的R inferno题来说,这个例子的一个措辞恰当的版本可能很好——在第8.2节中有很多因子谜题,但不是这个特定的谜题...

R相关问答推荐

R gtsummary tBL_summary,包含分层和两个独立分组变量

以R表示的gglikert地块调整总数

使用预定值列表将模拟数量(n)替换为rnorm()

在ggplot Likert条中添加水平线

根据收件箱中的特定值提取列名

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

从开始时间和结束时间导出时间

如果行和大于值,则过滤

在特定Quarto(reveal.js)幻灯片上隐藏徽标

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

如何在观测缺失的地方添加零

以更少间隔的较小表中的聚合离散频率表

当我添加美学时,geom_point未对齐

如何使用FormC使简单算术运算得到的数字是正确的?

根据r中另一个文本列中给定的范围对各列求和

如何构建一个for循环来循环处理动物ID?

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

抽样变换-REXP与RWEIBUR