将子数据组中的R数据帧中的数据进行排序
这个问题在这里已经有了答案:
新的更新
现在用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