【问题标题】:Can forcats::as_factor return an ordered factor?forcats::as_factor 可以返回有序因子吗?
【发布时间】:2017-08-31 03:55:31
【问题描述】:

as_factor 来自 forcats 可以返回有序因子吗?尽管我没有看到它在GitHub page 上报告为问题,但它似乎是一个缺失的功能。

我试过了:

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))

【问题讨论】:

  • 虽然forcats:::as_factor.character 调用fct_inorder,它支持ordered= 参数,但它似乎被硬编码为fct_inorder(x),所以无论你传入什么,它都不会被订购。这可能是一个错误,因为 fct_inorder(x,...) 似乎允许额外的 ordered=

标签: r tidyverse forcats


【解决方案1】:

看来这确实是一种意外行为。 forcats::as_factor 强制它在出现时对其进行排序,但不知何故没有设置标志。但是结合base::factor,不需要明确指定排序,设置flag似乎就可以了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 2010-09-11
    • 2016-02-08
    • 2012-07-06
    相关资源
    最近更新 更多