3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
由于問(wèn)題的標(biāo)題是清理因子水平(折疊多個(gè)級(jí)別/標(biāo)簽),forcats
為了完整起見(jiàn),此處也應(yīng)該提到包。forcats
于2016年8月在CRAN上亮相。
有幾種便利功能可用于清理因子水平:
x <- c("Y", "Y", "Yes", "N", "No", "H") library(forcats)
將要素級(jí)別折疊為手動(dòng)定義的組
fct_collapse(x, Yes = c("Y", "Yes"), No = c("N", "No"), NULL = "H")#[1] Yes Yes Yes No No <NA>#Levels: No Yes
手動(dòng)改變因子水平
fct_recode(x, Yes = "Y", Yes = "Yes", No = "N", No = "No", NULL = "H")#[1] Yes Yes Yes No No <NA>#Levels: No Yes
自動(dòng)重新標(biāo)記因子水平,必要時(shí)崩潰
fun <- function(z) { z[z == "Y"] <- "Yes" z[z == "N"] <- "No" z[!(z %in% c("Yes", "No"))] <- NA z}fct_relabel(factor(x), fun)#[1] Yes Yes Yes No No <NA>#Levels: No Yes
請(qǐng)注意,它fct_relabel()
適用于因子級(jí)別,因此它需要一個(gè)因子作為第一個(gè)參數(shù)。另外兩個(gè)函數(shù),fct_collapse()
也fct_recode()
接受一個(gè)字符向量,它是一個(gè)未記錄的特征。
首次出現(xiàn)重新排序因子水平
OP給出的預(yù)期輸出是
[1] Yes Yes Yes No No <NA>Levels: Yes No
這里的級(jí)別按其出現(xiàn)的順序排序x
,與默認(rèn)級(jí)別不同(?factor
:默認(rèn)情況下,因子的級(jí)別已排序)。
為了與預(yù)期輸出一致,可以通過(guò)fct_inorder()
在折疊級(jí)別之前使用來(lái)實(shí)現(xiàn):
fct_collapse(fct_inorder(x), Yes = c("Y", "Yes"), No = c("N", "No"), NULL = "H")fct_recode(fct_inorder(x), Yes = "Y", Yes = "Yes", No = "N", No = "No", NULL = "H")
現(xiàn)在,兩者都以相同的順序返回預(yù)期輸出。

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
也許命名向量作為鍵可能是有用的:
> factor(unname(c(Y = "Yes", Yes = "Yes", N = "No", No = "No", H = NA)[x]))[1] Yes Yes Yes No No <NA>Levels: No Yes
這看起來(lái)與你上一次嘗試非常相似......但是這個(gè)有效:-)
- 3 回答
- 0 關(guān)注
- 807 瀏覽
添加回答
舉報(bào)