2017-08-31 21 views
2

可以as_factorforcats返回一個有序的因子?這似乎是一個缺失的功能,如果沒有,雖然我沒有看到它作爲GitHub page上的問題報告。可以forcats :: as_factor返回一個有序的因子?

我曾嘗試:

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

雖然'forcats ::: as_factor.character'調用'fct_inorder',它不支持'有序='說法,它似乎是硬編碼爲'fct_inorder(X)'所以,無論你通過什麼在,它不會被命令。這可能是一個錯誤,因爲'fct_inorder(x,...)'似乎允許額外的'ordered =' – thelatemail

回答

1

看來這確實是一個意想不到的行爲。 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 
相關問題