【问题标题】:Strange behaviour gtools:mixedorder combined with dplyr::arrange?奇怪的行为 gtools:mixedorder 与 dplyr::arrange 结合?
【发布时间】:2021-09-17 12:48:15
【问题描述】:

在将dplyr::arrange 与gtools::mixedorder 一起使用时,我注意到了一个意想不到的结果。

考虑:

library(tidyverse)

test <- data.frame(V1 = c("all13_LG1", "all13_LG10", "all13_LG11",
 "all13_LG12", "all13_LG13", "all13_LG14", "all13_LG15", "all13_LG16",
 "all13_LG2", "all13_LG3", "all13_LG4", "all13_LG5", "all13_LG6",
 "all13_LG7", "all13_LG8", "all13_LG9"),
 V2 = c(rep(1:16)))

test2 <- test %>% arrange(gtools::mixedorder(V1))

test3 <- test %>% slice(gtools::mixedorder(V1))

在 test2 中,第一列已排序:"all13_LG1", "all13_LG3", "all13_LG4", "all13_LG5", "all13_LG6", "all13_LG7", "all13_LG8", "all13_LG9", "all13_LG10", "all13_LG11", "all13_LG12", "all13_LG13", "all13_LG14", "all13_LG15", "all13_LG16", "all13_LG2"

而在 test3 中,列按使用 gtools:mixedorder 时的预期排序

当我结合使用排列工具和混合工具时,为什么会发生这种情况?这是一个错误吗?

非常感谢, 安妮克

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    要在arrange 中使用mixedorder 的结果,您需要order 结果。

    library(dplyr)
    test %>% arrange(order(gtools::mixedorder(V1)))
    
    #           V1 V2
    #1   all13_LG1  1
    #2   all13_LG2  9
    #3   all13_LG3 10
    #4   all13_LG4 11
    #5   all13_LG5 12
    #6   all13_LG6 13
    #7   all13_LG7 14
    #8   all13_LG8 15
    #9   all13_LG9 16
    #10 all13_LG10  2
    #11 all13_LG11  3
    #12 all13_LG12  4
    #13 all13_LG13  5
    #14 all13_LG14  6
    #15 all13_LG15  7
    #16 all13_LG16  8
    

    【讨论】:

    • 有趣!你知道为什么会这样吗?
    【解决方案2】:

    我们可以slice 和mixedsort 和match

    library(dplyr)
    test %>% 
       slice(match(gtools::mixedsort(V1), V1))
    

    -输出

               V1 V2
    1   all13_LG1  1
    2   all13_LG2  9
    3   all13_LG3 10
    4   all13_LG4 11
    5   all13_LG5 12
    6   all13_LG6 13
    7   all13_LG7 14
    8   all13_LG8 15
    9   all13_LG9 16
    10 all13_LG10  2
    11 all13_LG11  3
    12 all13_LG12  4
    13 all13_LG13  5
    14 all13_LG14  6
    15 all13_LG15  7
    16 all13_LG16  8
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多