我知道函數紅寶石將一個指定的級別設置爲第一級。我想知道是否有一個內置函數將指定的級別設置爲最後一個。如果不是,寫這樣一個函數的有效方法是什麼?設置一個因子的水平作爲最後的
1
A
回答
3
沒有內置函數。你可以做這樣的:
lastlevel = function(f, last) {
if (!is.factor(f)) stop("f must be a factor")
orig_levels = levels(f)
if (! last %in% orig_levels) stop("last must be a level of f")
new_levels = c(setdiff(orig_levels, last), last)
factor(f, levels = new_levels)
}
x = factor(c("a", "b", "c"))
> lastlevel(x, "a")
[1] a b c
Levels: b c a
> lastlevel(x, "b")
[1] a b c
Levels: a c b
> lastlevel(x, "c")
[1] a b c
Levels: a b c
> lastlevel(x, "d")
Error in lastlevel(x, "d") : last must be a level of f
我覺得有點傻,因爲我只是寫了這一點,當我可以做出一個微小的修改stats:::relevel.factor
。改編自relevel
的溶液應該是這樣的:
lastlevel = function (f, last, ...) {
if (!is.factor(f)) stop("f must be a factor")
lev <- levels(x)
if (length(last) != 1L)
stop("'last' must be of length one")
if (is.character(last))
last <- match(last, lev)
if (is.na(last))
stop("'last' must be an existing level")
nlev <- length(lev)
if (last < 1 || last > nlev)
stop(gettextf("last = %d must be in 1L:%d", last, nlev),
domain = NA)
factor(x, levels = lev[c(last, seq_along(lev)[-last])])
}
它檢查幾個更多的輸入,並且還接受一個數字(例如,last = 2
將移動第二級到最後)。
2
包forcats
有一個功能,這樣做整齊。
f <- gl(2, 1, labels = c("b", "a"))
forcats::fct_relevel(f, "b", after = Inf)
#> [1] b a
#> Levels: a b
相關問題
- 1. R - 將因子的參考水平設置爲NA
- 2. 根據另一列的數值設置因子水平
- 3. ggplot:facet_grid,但使用一個因子水平作爲參考
- 4. 通過因子水平的最後三行
- 5. rxMerge因子水平
- 6. 鬼因子水平
- 7. 基於另一個因素的重排因子水平
- 8. 在預測時手動設置新因子水平的係數
- 9. 添加具有一個水平因子平均值的列
- 10. R中的因素 - 當我設置水平時,一個因子被重新編碼爲NA
- 11. 循環一個因子的水平和比較一個變量
- 12. 設置級別創建)一個因素對`水平時(< - `
- 13. 通過的另一個因素就近水平替換因素的水平
- 14. 將因子水平轉換爲數字
- 15. 濱根據給定爲因子水平
- 16. 功能以一個因子各個水平的計數NA值
- 17. 意思是因子水平
- 18. 組合因子水平
- 19. ggpairs更改因子水平
- 20. R:約因子水平列
- 21. 結合因子水平3.2.1
- 22. 避免失敗時的一個因素在測試新的水平設置
- 23. 按因子水平加上或乘以一個不同的值
- 24. 有效地引入一個因子向量的新水平
- 25. 在一個因子水平內的記錄數
- 26. ř改變一個因子水平的變量值由
- 27. 作爲一個整數n中的因子存在的最大因子數
- 28. R中的繪圖因子水平
- 29. R中的缺失因子水平
- 30. ggplot2:修復因子水平的顏色
打我30秒! –