gpt4 book ai didi

r - 按混合方向的多个变量对 data.frame 进行排序

转载 作者:行者123 更新时间:2023-12-01 13:20:35 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to order a data frame by one descending and one ascending column?

(11 个回答)


3年前关闭。




对于这个示例 data.frame,

df <- data.frame(var1=c("b","a","b","a","a","b"),
var2=c("l","l","k","k","l","k"),
var3=c("t","t","x","t","x","x"),
var4=c(5,3,3,5,5,3),
stringsAsFactors=F)

未分类
  var1 var2 var3 var4
1 b l t 5
2 a l t 3
3 b k x 3
4 a k t 5
5 a l x 5
6 b k x 3

我想同时按此顺序对三列“var2”、“var3”和“var4”进行排序。一列上升,另外两列下降。要排序的列名存储在变量中。
sort_asc <- "var2"
sort_desc <- c("var3","var4")

中执行此操作的最佳方法是什么?基础 R ?

更新详情

如果首先按“var2”升序(步骤 1)然后按“var3”和“var4”降序(作为步骤 2),这是输出。
var1   var2 var3 var4
a l x 5
b k x 3
b k x 3
a k t 5
b l t 5
a l t 3

但我正在寻找的是同时进行所有三种排序以获得此结果:
var1 var2 var3 var4
b k x 3
b k x 3
a k t 5
a l x 5
b l t 5
a l t 3

'var2' 是升序 (k,l),在 k 和 l 中,'var3' 是降序,类似地 'var4' 是降序

澄清一下,这个问题与其他 data.frame 排序问题有何不同......
  • 多列排序
  • 要排序的列名存储在变量中
  • 不同的排序方向 (asc,desc)
  • 排序不是逐步(一个接一个排序)而是同时(所有选定的列同时)
  • 使用基础 R,而不是 dplyr
  • 最佳答案

    逐步排序(先升序再降序)。

    dplyr 解决方案:

    library(dplyr)
    df %>%
    arrange_at(sort_asc) %>%
    arrange_at(sort_desc, desc)

    var1 var2 var3 var4
    1 a l x 5
    2 b k x 3
    3 b k x 3
    4 a k t 5
    5 b l t 5
    6 a l t 3

    基础 R 解决方案:

    base R , 如果有多个列(一般情况下)使用 orderdo.call .在这里,我们首先创建升序索引,然后使用第二组列('sort_desc')对它进行降序排序
    i1 <- do.call(order, df[sort_asc]) 
    df1 <- df[i1,]
    i2 <- do.call(order, c(df1[sort_desc], list(decreasing = TRUE)))
    df1[i2,]

    var1 var2 var3 var4
    5 a l x 5
    3 b k x 3
    6 b k x 3
    4 a k t 5
    1 b l t 5
    2 a l t 3

    同时/顺序排序(所有排序变量都用于一个排序步骤):

    dplyr 解决方案:
    df %>% 
    arrange_(.dots = c(sort_asc, paste0("desc(", sort_desc, ")")))

    # var1 var2 var3 var4
    #1 b k x 3
    #2 b k x 3
    #3 a k t 5
    #4 a l x 5
    #5 b l t 5
    #6 a l t 3

    基础 R 解决方案:

    base R , 如果我们需要与 arrange_ 类似的输出
    df[do.call(order, c(as.list(df[sort_asc]), lapply(df[sort_desc], 
    function(x) -xtfrm(x)))),]

    # var1 var2 var3 var4
    #3 b k x 3
    #6 b k x 3
    #4 a k t 5
    #5 a l x 5
    #1 b l t 5
    #2 a l t 3

    关于r - 按混合方向的多个变量对 data.frame 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50116401/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com