在其他编程语言中,我熟悉字符串数据类型。除此数据类型外,R还具有因子数据类型。我是R语言的新手,所以我试图将头转向这种新数据类型的意图。

问题: R中'factor'和'string'数据类型之间的实际区别是什么?

我得到(在概念/哲学层面上)应该将因子数据类型编码为类别随机变量的值,但是我(在实际层面上)不理解为什么字符串数据类型不足以实现此目的。

看起来具有相同的实用目的的重复数据类型将是bad design。但是,如果R在这样的基本水平上确实设计不佳,那么实现其受欢迎程度的可能性将大大降低。因此,要么发生了非常不可能的事件,要么我误解了因子数据类型的实际意义/目的。

尝试:我能想到的一件事是“因子水平”的概念,即可以为因子分配顺序(对于字符串不能执行),这在描述“有序分类变量”时非常有用,即按顺序分类的变量(例如“低”,“中”,“高”)。

(尽管即使这似乎并不一定要严格要求因子。由于在可数集合上排序始终是线性的,即没有真正的偏序,所以我们始终可以使用从整数的某些子集到字符串的映射来完成相同的操作问题-但是在实践中,一遍又一遍地实现可能会很痛苦,而且天真的实现可能不如R中内置的因子和因子水平的实现效率高。)

但是,并非所有分类变量都是序数,有些不是“标称”(即无序)。但是,“因子”和“因子水平”似乎仍与这些“名义分类变量”一起使用。为什么是这样? IE。使用因子而不是字符串作为此类变量的实际好处是什么?

我可以找到的关于该主题的唯一其他信息是以下报价here:



这是什么原因呢?这仅适用于“普通分类变量”,还是适用于“普通分类变量”?

相关但不同的问题:这些问题似乎相关,但并未具体解决我的问题的核心-即,因素和字符串之间的区别,以及为什么有这样的区别是有用的(从编程的角度来看,不是统计一)。

Difference between ordered and unordered factor variables in R
Factors ordered vs. levels
Is there an advantage to ordering a categorical variable?
factor() command in R is for categorical variables with hierarchy level only?

最佳答案

实际差异:

  • 如果x是字符串,则可以采用任何值。如果x是一个因子,则只能从所有级别的列表中获取值。这也使这些变量的存储效率更高。

  • 例子:
    > x <- factor(c("cat1","cat1","cat2"),levels = c("cat1","cat2") )
    > x
    [1] cat1 cat1 cat2
    Levels: cat1 cat2
    > x[3] <- "cat3"
    Warning message:
    In `[<-.factor`(`*tmp*`, 3, value = "cat3") :
      invalid factor level, NA generated
    > x
    [1] cat1 cat1 <NA>
    Levels: cat1 cat2
    
  • 正如您所说的,您可能有序数因素。这意味着您可以在变量中添加额外的信息,例如level1

    关于r - R中 'factor'和 'string'数据类型之间的实际区别是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43424761/

  • 10-12 21:16