按一个因子列排序数据帧,升序另一个因子

时间:2017-04-13 01:54:44

标签: r sorting

我有一个由两个因子列组成的数据帧。 我想按一列升序和另一列降序排序。 更具体地说,我想找到与SQL相同的R代码 “按1 asc排序,2 desc”

2 个答案:

答案 0 :(得分:0)

您可以使用dplyr::arrange

轻松按变量排列行

示例:

set.seed(123)
dat <- data.frame(a= letters[sample(1:26, 20)], 
        b = rep(c("orange", "apple", "pear", "banana"), 5))
dat %>% arrange(a, desc(b))

答案 1 :(得分:0)

您还可以将order函数与method = "radix"一起使用,它允许您传递参数decreasing的向量:

## Generate sample data:
set.seed(123)
dat <- data.frame(a = letters[sample(1:5, 20, replace = TRUE)], 
    b = rep(c("orange", "apple", "pear", "banana"), 5))
## Sort by increasing a and decreasing b:
dat2 <- dat[order(dat$a, dat$b, decreasing = c(FALSE, TRUE), method = "radix"),]

head(dat2)
   a      b
15 a   pear
6  a  apple
18 a  apple
19 b   pear
1  b orange
17 b orange

或者,您可以按递增顺序对两列进行排序,并使用函数b反转列rev

dat3 <- dat[order(dat$a, rev(dat$b)),]

head(dat3)
   a      b
15 a   pear
6  a  apple
18 a  apple
19 b   pear
1  b orange
17 b orange