将子数据组中的R数据帧中的数据进行排序

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

  • 如何按多个列排序数据框? 16个答案

  • 新的更新

    现在用ISIN和更多的关系更好,我用了两个辅助柱。 首先,我通过DATE生成订单,然后通过ISIN进行分组,并获得每个组的最小值(这给了我的组顺序)。 我的data.frame被命名为B.

    ord<-B %>% arrange(DATE) %>% mutate(ord=order(DATE))
    ord2<-ord %>% group_by(ISIN) %>% summarize(min_ord=min(ord))
    ord3<-merge(ord,ord2)
    ord3<-ord3 %>% arrange(min_ord)
    
    ISIN      CF       DATE ord min_ord
    1     E   5.000 2016-04-21   1       1
    2     E   5.000 2017-04-21   7       1
    3     E   5.000 2018-04-21   9       1
    4     E   5.000 2019-04-21  11       1
    5     E 105.000 2020-04-21  13       1
    6     B 104.875 2016-05-31   2       2
    7     F   7.800 2017-09-09   8       3
    8     F   7.800 2018-09-09  10       3
    9     F   7.800 2019-09-09  12       3
    10    F 107.800 2020-09-09  14       3
    11    F   7.800 2016-09-09   3       3
    12    A 105.750 2016-09-30   4       4
    13    D 103.875 2016-10-07   5       5
    14    C 106.875 2017-02-13   6       6
    

    您可以使用管道中的select(ISIN:DATE)删除额外的列。 我保留它们是因为我认为它们可以方便地进行额外的计算。

    旧的更新

    好的,事情是你的ISIN值不适合你想要订购的订单。 有时候,你的ISIN以“降序”的顺序进行(例如,503326> 255820> 255817),但有时它不会,并且你希望你的DATE列为你的数据排序(例如2016-05-31 2016-09-31之前, 2017-02-13之前2016-10-07之前30)。

    因为在这种情况下,ISIN允许以伪方便的方式使用ifelse:

    df %>% mutate(ord=ifelse(ISIN=="XS0503326083",1,
                      ifelse(ISIN=="XS0255820804",2,
                      ifelse(ISIN=="XS0255817685",3,
                      ifelse(ISIN=="XS0438753294",4,5))))) %>%
           arrange(ord)
    
      row.names         ISIN      CF       DATE ord
    1        16 XS0503326083   5.000 2016-04-21   1
    2        15 XS0503326083   5.000 2017-04-21   1
    3        14 XS0503326083   5.000 2018-04-21   1
    4        13 XS0503326083   5.000 2019-04-21   1
    5        12 XS0503326083 105.000 2020-04-21   1
    6         7 XS0255820804 104.875 2016-05-31   2
    7         6 XS0255817685 105.750 2016-09-30   3
    8        23 XS0438753294 103.875 2016-10-07   4
    9        22 XS0286431100 106.875 2017-02-13   5
    

    我知道你可能有许多ISIN价值来融入这种情况。 另外,在你的例子中,只有绑定的ISIN值将被DATE和CF排列,没有问题。 这可能不适用于更大的数据框。


    data.table

    DT <- data.table(yourDF, key = c("ISIN", "Date"))
    

    library(dplyr)
    sorted <- df %>% arrange(ISIN,DATE)
    
    链接地址: http://www.djcxy.com/p/70857.html

    上一篇: Sort data in R data frame within subgroups

    下一篇: How to order data set in R