代码之家  ›  专栏  ›  技术社区  ›  masher

保持不同类型的第一次出现的原始相对位置的排序数据

  •  1
  • masher  · 技术社区  · 3 年前

    我有一张桌子, d ,安排如下: value 正在减少。

    我还是想收集 type ,同时保持每个项目第一次进入的相关安排 . 如图所示 d_sorted

    group_by() 对我不起作用。

    如何对数据进行排序?

    library(tidyverse)
    
    #before
    d <- tribble(
      ~"type", ~"value",
      "R" , 109,
      "C" , 105,
      "B" , 80,
      "W" , 77,
      "R" , 70,
      "W" , 66,
      "A" , 58,
      "C" , 55
    )
    
    
    #after
    d_sorted <- tribble(
      ~"type", ~"value",
      "R" , 109,
      "R" , 70,
      "C" , 105,
      "C" , 55,
      "B" , 80,
      "W" , 77,
      "W" , 66,
      "A" , 58
    )
    

    于2021年4月15日由 reprex package (v1.0.0)

    1 回复  |  直到 3 年前
        1
  •  3
  •   Ronak Shah    3 年前

    你可以用 arrange 具有 match

    library(dplyr)
    d %>% arrange(match(type, unique(type)))
    
    #  type  value
    #  <chr> <dbl>
    #1 R       109
    #2 R        70
    #3 C       105
    #4 C        55
    #5 B        80
    #6 W        77
    #7 W        66
    #8 A        58
    

    在R基中:

    d[order(match(d$type, unique(d$type))), ]
    
        2
  •  1
  •   TarJae    3 年前

    unique

    d %>% arrange(type = factor(type, unique(type)))
    

    # A tibble: 8 x 2
      type  value
      <chr> <dbl>
    1 R       109
    2 R        70
    3 C       105
    4 C        55
    5 B        80
    6 W        77
    7 W        66
    8 A        58
    
        3
  •  0
  •   mt1022    3 年前

    data.table 加入:

    library(tibble)
    setDT(d)
    d[CJ(type, sorted = F, unique = T), on = .(type)]
       type value
    1:    R   109
    2:    R    70
    3:    C   105
    4:    C    55
    5:    B    80
    6:    W    77
    7:    W    66
    8:    A    58