是否有充分的理由使列成为字符而不是因素?

时间:2018-09-16 07:01:55

标签: r string type-conversion factors

这个想法似乎是一个愚蠢的问题,但是在使用R几个月后,我意识到我经常发现自己将字符串转换为因数,例如#.#函数不适用于字符串。

在这一点上,我正在考虑将所有字符串都转换为一个因子。但这引出了一个问题,是否有理由(除了对字符串本身执行操作之外)?

1 个答案:

答案 0 :(得分:6)

因子具有双重表示形式-“标签”;和该级别的基础编码。 R使用这些表示中的哪一个可能会引起微妙和混乱。

子集说明了这可能造成混淆。这是一个命名向量,一个字符向量和一个默认级别(按字母顺序排列)的因子

x = c(foo = 1, bar = 2)
y = c("bar", "foo")
z = factor(y)        # default levels are "bar", "foo", i.e., alphabetical

x子集y会将字符值与名称匹配,但是用x子集z则使用基础层编码。

> x[y]
bar foo 
  2   1 
> x[z]
foo bar 
  1   2 

这可能会更加令人困惑,因为R可以在不同的语言环境中工作(例如,我使用en_US语言环境-美国英语),并且不同语言环境的排序规则(排序)顺序可以不同-默认不同地区的级别可能有所不同。