为什么有序矢量并不总是根据R中的“is.ordered”排序?

时间:2014-01-26 17:27:49

标签: r sorting categorical-data

我想这与水平和因素有关,但我不确定到底发生了什么:

test <- c(1,4,2,3,7,9,8)
testOrdered <- test[order(test)]
is.ordered(testOrdered)
is.ordered(rev(testOrdered))

两次,函数都返回FALSE,即没有向量排序。首先,我期望函数测试给定向量是否按“顺序”排序,即“已排序”。回到is.sorted的定义后,我假设is.ordered询问给定的向量是否按其级别的顺序排序。矢量测试(据我所知)不应该有任何级别,对吧?所以,“假”或多或少是正确的答案,我猜(但NaN会更好吗?)。任何人都可以a)帮助我理解什么是正确的,什么时候会是真的,以及b)如何测试数字向量是否被排序/排序?

1 个答案:

答案 0 :(得分:7)

在R中存在两种类型的因素:无序有序。在您的情况下,您有一个简单的数字向量,而不是一个因素。因此,函数is.ordered不适用,如上所述。

无序因素通常称为分类数据,它没有自然顺序。要在R中表示,可以使用无序因子

f <- factor(c(1,3,2,1,3))
f
[1] 1 3 2 1 3
Levels: 1 2 3

is.ordered(f)
[1] FALSE

如果因子具有自然排序(通常称为序数有序分类数据),则可以使用有序因子在R中定义。请注意有序因子级别的<符号。

f <- factor(c(1,3,2,1,3), ordered=TRUE)
f
[1] 1 3 2 1 3
Levels: 1 < 2 < 3

is.ordered(f)
[1] TRUE

因此,is.ordered将区分这两类因素。