有很多关于如何重新排序列表的信息,但我无法找到这个具体问题的答案:
假设以下因素列表已排序:
x <- factor(c(1, 4, 3, 7, 4, 8, 10, 34))
x
Levels: 1 3 4 7 8 10 34
现在假设我喜欢这些因素的顺序,除了我想把两个因素带到前面,换掉其他所有因素,例如:
Levels: 10 7 1 3 4 8 34 # order is preserved, except 10 and 7 are moved to front
我知道一个小清单,可以手动更改订单,如下所示:
factor(x, levels = c(10, 7, 1, 3, 4, 8, 34))
x
Levels: 10 7 1 3 4 8 34
但就我而言,我正在处理大量因素,手动排序是不切实际的。此外,这个因素列表也会发生变化,所以我想更动态地这样做。
所以,我正在寻找一种方法,我可以移动指定因子的位置,同时保留列表中其他所有内容的顺序,而不显式引用所有其他列表项。
答案 0 :(得分:1)
一个选项是relevel
relevel(x, "10")
#[1] 1 4 3 7 4 8 10 34
#Levels: 10 1 3 4 7 8 34
如果我们需要重新定位多个级别
forcats::fct_relevel(x, c(10, 7))
#[1] 1 4 3 7 4 8 10 34
#Levels: 10 7 1 3 4 8 34
位置也可以改变
forcats::fct_relevel(x, c(10, 7), after = 3)
#[1] 1 4 3 7 4 8 10 34
#Levels: 1 3 4 10 7 8 34
这个职位也可以在最后
forcats::fct_relevel(x, c(10, 7), after = Inf)
#[1] 1 4 3 7 4 8 10 34
#Levels: 1 3 4 8 34 10 7