更改多个特定因素的列表位置

时间:2017-08-11 17:46:47

标签: r

有很多关于如何重新排序列表的信息,但我无法找到这个具体问题的答案:

假设以下因素列表已排序:

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

但就我而言,我正在处理大量因素,手动排序是不切实际的。此外,这个因素列表也会发生变化,所以我想更动态地这样做。

所以,我正在寻找一种方法,我可以移动指定因子的位置,同时保留列表中其他所有内容的顺序,而不显式引用所有其他列表项。

1 个答案:

答案 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