我很困惑何时使用
因子(educ)或因子(agegroup)在R.它是否用于分类有序数据?或者我可以使用没有层次结构的简单分类数据吗?
我知道这是如此基本.我真的需要一些澄清.
我真的没有在这里看到一个明确的问题,所以也许一个简单的例子就足以作为答案了.
想象一下,我们有以下数据.
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()使用levels和ordered = TRUE参数创建分层类别.
或者,ordered()如果您想直接创建有序因子,请使用.仍需要指定类别的顺序:
ordered(set1, levels = c("CA", "BA", "AA", "CC", "B"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22762 次 |
| 最近记录: |