首页 文章

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

提问于
浏览
-2

我有一个数据框,由两个因子列组成 . 我想按一列升序和另一列降序排序 . 更具体地说,我想找到等效的R代码到SQL“order by 1 asc,2 desc”

2 回答

  • 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
    

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

    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
    
  • 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))
    

相关问题