R的水平和标记之间似乎存在差异。
到目前为止,我一直认为水平是因子水平的“真实”名称,而标签是用于输出的名称(例如表格和图表)。显然,情况并非如此,如以下示例所示:

df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame':   3 obs. of  2 variables:
 $ v: num  1 2 3
 $ f: Factor w/ 3 levels "a","b","c": 1 2 3

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

我认为编写脚本时仍可以访问级别('a','b','c'),但这不起作用:
> df$f=='a'
[1] FALSE FALSE FALSE

但这确实是:
> df$f=='Treatment A: XYZ'
[1]  TRUE FALSE FALSE

因此,我的问题包括两部分:
  • 级别和标签之间有什么区别?
  • 是否可以为脚本和输出的因子级别使用不同的名称?

  • 背景:对于较长的脚本,使用短因子级别的脚本似乎要容易得多。但是,对于报告和地块,此短因子水平可能不够用,应使用更精确的名称代替。

    最佳答案

    非常简短:factor()函数中的级别是输入,标签是输出。一个因子仅具有level属性,该属性由labels函数中的factor()参数设置。这与SPSS等统计软件包中的标签概念不同,一开始可能会造成混淆。

    您在此代码行中所做的

    df$f <- factor(df$f, levels=c('a','b','c'),
      labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
    

    告诉R,有一个 vector df$f
    您想将其转换为因子的
  • ,其中不同级别被编码为a,b和c
  • ,并且您希望将其级别标记为“处理A”等。

  • 因子函数将查找值a,b和c,将它们转换为数值因子类,并将标签值添加到因子的level属性。此属性用于将内部数值转换为正确的标签。但是如您所见,没有label属性。
    > df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
    > attributes(df$f)
    $levels
    [1] "a" "b" "c"
    
    $class
    [1] "factor"
    
    > df$f <- factor(df$f, levels=c('a','b','c'),
    +   labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
    > attributes(df$f)
    $levels
    [1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"
    
    $class
    [1] "factor"
    

    07-24 09:52
    查看更多