R中的factor()命令仅用于具有层次结构级别的分类变量?

lei*_*ian 1 r

我很困惑何时使用

因子(educ)或因子(agegroup)
在R.它是否用于分类有序数据?或者我可以使用没有层次结构的简单分类数据吗?

我知道这是如此基本.我真的需要一些澄清.

A5C*_*2T1 6

我真的没有在这里看到一个明确的问题,所以也许一个简单的例子就足以作为答案了.

想象一下,我们有以下数据.

set1 <- c("AA", "B", "BA", "CC", "CA", "AA", "BA", "CC", "CC")
Run Code Online (Sandbox Code Playgroud)

我们想要考虑这些数据.

f.set1 <- factor(set1)
Run Code Online (Sandbox Code Playgroud)

我们来看看输出.请注意,R只对字母进行了字母顺序排列,但并未说明这意味着层次结构(请参阅"级别"行).

f.set1
# [1] AA B  BA CC CA AA BA CC CC
# Levels: AA B BA CA CC
is.ordered(f.set1)
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)

但是,使用as.numeric因子数据可能会让你误以为它是分层的.请注意,"5"在下面的输出中位于"4"之前,并且还要注意按字母顺序排列的输出table(f.set1)(如果您只是这样做,也会发生这种情况table(set1).

as.numeric(f.set1)
# [1] 1 2 3 5 4 1 3 5 5
table(f.set1)
# f.set1
# AA  B BA CA CC 
#  2  1  2  1  3 
Run Code Online (Sandbox Code Playgroud)

现在让我们将这与我们将ordered参数与参数一起 使用时发生的情况进行比较levels.使用levelsplus ordered = TRUE告诉我们这个分类数据按照指定的顺序是分层的levels(不按字母顺序或按照我们输入数据的顺序).

o.set1 <- factor(set1, 
                 levels = c("CA", "BA", "AA", "CC", "B"), 
                 ordered = TRUE)
Run Code Online (Sandbox Code Playgroud)

甚至查看输出现在也显示我们的层次结构

o.set1
# [1] AA B  BA CC CA AA BA CC CC
# Levels: CA < BA < AA < CC < B
is.ordered(o.set1)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

as.numeric和功能一样table.

as.numeric(o.set1)
# [1] 3 5 2 4 1 3 2 4 4
table(o.set1)
# o.set1
# CA BA AA CC  B 
#  1  2  2  3  1
Run Code Online (Sandbox Code Playgroud)

因此,总而言之,factor()本身只是创建了分类数据的非分层排序因子; factor()使用levelsordered = TRUE参数创建分层类别.

或者,ordered()如果您想直接创建有序因子,请使用.仍需要指定类别的顺序:

ordered(set1, levels = c("CA", "BA", "AA", "CC", "B"))
Run Code Online (Sandbox Code Playgroud)