R 更改多个特定因素的列表位置
关于如何重新排列列表,有很多信息,但我还没有找到这个特定问题的答案: 假设以下因素列表已排序:R 更改多个特定因素的列表位置,r,R,关于如何重新排列列表,有很多信息,但我还没有找到这个特定问题的答案: 假设以下因素列表已排序: x <- factor(c(1, 4, 3, 7, 4, 8, 10, 34)) x Levels: 1 3 4 7 8 10 34 我知道,通过一个小列表,可以手动更改顺序,如下所示: factor(x, levels = c(10, 7, 1, 3, 4, 8, 34)) x Levels: 10 7 1 3 4 8 34 但在我的例子中,我正在处理大量的因素,在这些因素中,手动排序
x <- factor(c(1, 4, 3, 7, 4, 8, 10, 34))
x
Levels: 1 3 4 7 8 10 34
我知道,通过一个小列表,可以手动更改顺序,如下所示:
factor(x, levels = c(10, 7, 1, 3, 4, 8, 34))
x
Levels: 10 7 1 3 4 8 34
但在我的例子中,我正在处理大量的因素,在这些因素中,手动排序是不切实际的。而且,这个因素列表会发生变化,所以我想更动态地做这件事
因此,我正在寻找一种方法,可以移动指定因子的位置,同时保留列表中其他所有项的顺序,而不显式引用所有其他列表项。一个选项是
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
您可以使用
setdiff
x <- factor(c(1, 4, 3, 7, 4, 8, 10, 34))
L1 = levels(x)
ToMove = c("10","7")
L2 = c(ToMove, setdiff(L1, ToMove))
x <- factor(x, levels=L2)
levels(x)
[1] "10" "7" "1" "3" "4" "8" "34"
x对不起,在我按下“提交”按钮后,我意识到我真的需要将多个因素推到最前面的能力(我已经知道这种将单个因素推到最前面的方法)
x <- factor(c(1, 4, 3, 7, 4, 8, 10, 34))
L1 = levels(x)
ToMove = c("10","7")
L2 = c(ToMove, setdiff(L1, ToMove))
x <- factor(x, levels=L2)
levels(x)
[1] "10" "7" "1" "3" "4" "8" "34"