在 R 中按两列对数据帧进行排序

Order data frame by two columns in R

提问人:Steve 提问时间:7/21/2011 最后编辑:Steve 更新时间:2/18/2014 访问量:10201

问:

我正在尝试按两个因素对数据框的行进行重新排序。对于第一个因素,我对默认排序感到满意。对于第二个因素,我想将我自己的自定义顺序强加给行。以下是一些虚拟数据:

dat <- data.frame(apple=rep(LETTERS[1:10], 3), 
                  orange=c(rep("agg", 10), rep("org", 10), rep("fut", 10)),
                  pear=rnorm(30, 10), 
                  grape=rnorm(30, 10))

我想以特定方式订购“苹果”:

appleOrdered <- c("E", "D", "J", "A", "F", "G", "I", "B", "H", "C")

我试过这个:

dat <- dat[with(dat, order(orange, rep(appleOrdered, 3))), ]

但它似乎将“苹果”放在一个随机的顺序中。有什么建议吗?谢谢。

r

评论

0赞 Joshua Ulrich 7/21/2011
与如何根据一个向量的值对一个向量进行排序相关

答:

12赞 joran 7/21/2011 #1

尝试使用按所需顺序排列水平的因子,并使用以下函数:arrangeplyr

dat$apple <- factor(dat$apple,levels=appleOrdered)
arrange(dat,orange,apple)

评论

0赞 Ben Bolker 2/18/2014
你不需要.ordered=TRUE
12赞 Charles 7/21/2011 #2

对因子水平重新排序:

dat[with(dat, order(orange, as.integer(factor(apple, appleOrdered)))), ]

评论

1赞 Steve 7/21/2011
这很好用,谢谢。有什么理由将因子调用包装在 as.integer() 中吗?删除它似乎给出了完全相同的结果。
0赞 Charles 7/21/2011
声音发现 - 如果因子排序顺序是由它的级别或 as.character() 定义的,我不肯定。