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

15

我想通过两个因素重新排列数据框的行。对于第一个因素,我满意默认排序。对于第二个因素,我希望对行施加自定义排序。这里有一些虚拟数据:

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

但是它似乎会将 "apple" 放入随机顺序。有什么建议吗?谢谢。


2个回答

12

尝试在所需顺序中使用因子及来自plyrarrange函数:

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

您不需要使用 ordered=TRUE - Ben Bolker

12

重新排序因子水平:

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

1
这个很好用,谢谢。在调用因子时包装为as.integer()是否有任何理由? 删除它似乎会得到完全相同的结果。 - Steve
听起来不错 - 我不确定因子排序顺序是由级别还是它的as.character()定义的。 - Charles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接