5

可以as_factorforcats返回一个有序的因素吗?如果没有,这似乎是一个缺失的功能,尽管我没有在GitHub 页面上看到它作为问题报告。

我努力了:

y <- forcats::as_factor(c("a", "z", "g"), ordered = TRUE)
is.ordered(y)
# FALSE

如果我不能,那么这样做是否有任何潜在危险:

y <- ordered(forcats::as_factor(c("a", "z", "g")))

或者这样做会更好:

y <- factor(c("a", "z", "g"), levels = unique(c("a", "z", "g")), ordered = TRUE))
4

1 回答 1

2

看来这确实是一种意外行为。forcats::as_factor正在强制它按照它们出现的顺序排列,但不知何故没有设置标志。但是将它与 结合起来base::factor,不需要明确指定排序,只需设置标志似乎就可以正常工作。

y <- forcats::as_factor(c("a", "z", "g"))
y
[1] a z g
Levels: a z g

is.ordered(y)
[1] FALSE

k <- factor(y, c("a","z","g"), ordered = TRUE)
k
[1] a z g
Levels: a < z < g

is.ordered(k)
[1] TRUE

k2 <- factor( y, ordered = TRUE)
k2
[1] a z g
Levels: a < z < g

is.ordered(k2)
[1] TRUE

k3 <- factor(forcats::as_factor(c("a","g","z")), ordered = TRUE)
k3
[1] a g z
Levels: a < g < z

is.ordered(k3)
[1] TRUE
于 2017-08-31T04:59:48.503 回答