在R中按两列排序数据帧

时间:2011-07-20 23:24:31

标签: r

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

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))), ]

但它似乎把“苹果”变成随机顺序。有什么建议?感谢。

2 个答案:

答案 0 :(得分:11)

尝试使用具有所需顺序级别的因子和arrange中的plyr函数:

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

答案 1 :(得分:10)

重新排序因子水平:

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