这是我所面对的一个简单例子.我有我的因子水平,B-1, B-2, B-9, B-10, B-11
并希望按照给定的顺序排列它们.在这里,我可以轻松地重新排列级别,但是,在我的数据中,我确实有复杂的结构,并希望通过一些编码来完成.我想知道如何按逻辑顺序排列这些因子水平.
set.seed(12345) f <- rep(c("B-1", "B-2", "B-9", "B-10", "B-11"), each=3) Y <- runif(n=15, min=100, max=1000) df <- data.frame(f, Y) levels(df$f) [1] "B-1" "B-10" "B-11" "B-2" "B-9" library(gtools) mixedsort(df$f) [1] B-1 B-1 B-1 B-10 B-10 B-10 B-11 B-11 B-11 B-2 B-2 B-2 B-9 B-9 B-9 Levels: B-1 B-10 B-11 B-2 B-9 df2 <- df[mixedorder(df$f), ] df3 <- within(df, Position <- factor(f, levels=names(sort(table(f), decreasing=TRUE)))) levels(df3$Position) [1] "B-1" "B-10" "B-11" "B-2" "B-9"
现在我可以找到这个问题的解决方案,这个问题在发布时立即关闭.谢谢@akrun的帮助.
我们可以指定'f'列levels
的mixedsort
ed levels
.
df$f <- factor(df$f, levels=mixedsort(levels(df$f), decreasing=TRUE)) levels(df$f) #[1] "B-1" "B-2" "B-9" "B-10" "B-11"
或者根据@Ben Bolker的建议,变体就是
df <- transform(df,f=factor(f,levels=mixedsort(levels(f), decreasing=TRUE)))
我想这-
被解释为minus
@Gregor在评论中建议的标志.