当前位置:  开发笔记 > 编程语言 > 正文

重新排序R data.frame中的因子级别

如何解决《重新排序Rdata.frame中的因子级别》经验,为你挑选了1个好方法。

这是我所面对的一个简单例子.我有我的因子水平,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的帮助.



1> akrun..:

我们可以指定'f'列levelsmixedsorted 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在评论中建议的标志.


这对我有用,但我很困惑为什么`decrease = TRUE`是必要的,以便将值排序在(至少对我来说)*增加*顺序(B-1到B-11)?
我认为连字符是作为减号的解释,使得所有数字对于"mixedsort"都是负面的.
或者`df < - transform(f,f = factor(f),levels = mixedsort(levels(f),decrease = TRUE))
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有