我从Bloomberg下载数据,然后在R中更新。数据框如下所示。
ticker date PX_LAST PE_RATIO
1 SMI Index 2014-09-30 8835.14 20.3692
2 SMI Index 2014-10-31 8837.78 20.3753
3 DAX Index 2014-09-30 9474.30 16.6487
4 DAX Index 2014-10-31 9326.87 16.3896
5 SMI Index 2014-11-28 9150.46 21.0962
6 SMI Index 2014-12-31 8983.37 20.6990
7 DAX Index 2014-11-28 9980.85 17.5388
8 DAX Index 2014-12-31 9805.55 16.8639
现在我希望这个数据框按照自动收报机排序(不按字母顺序,但按照自动收报机的顺序排序),然后是日期,以便最终结果如下:
ticker date PX_LAST PE_RATIO
1 SMI Index 2014-09-30 8835.14 20.3692
2 SMI Index 2014-10-31 8837.78 20.3753
3 SMI Index 2014-11-28 9150.46 21.0962
4 SMI Index 2014-12-31 8983.37 20.6990
5 DAX Index 2014-09-30 9474.30 16.6487
6 DAX Index 2014-10-31 9326.87 16.3896
7 DAX Index 2014-11-28 9980.85 17.5388
8 DAX Index 2014-12-31 9805.55 16.8639
答案 0 :(得分:3)
chgroup()
包中有一个函数data.table
,可以完全满足您的要求。它将来自向量的值组合在一起,同时保留初始顺序。它仅适用于角色向量(角色为ch
)。
require(data.table)
DF[chgroup(DF$ticker), ]
# ticker date PX_LAST PE_RATIO
# 1 SMIIndex 2014-09-30 8835.14 20.3692
# 2 SMIIndex 2014-10-31 8837.78 20.3753
# 5 SMIIndex 2014-11-28 9150.46 21.0962
# 6 SMIIndex 2014-12-31 8983.37 20.6990
# 3 DAXIndex 2014-09-30 9474.30 16.6487
# 4 DAXIndex 2014-10-31 9326.87 16.3896
# 7 DAXIndex 2014-11-28 9980.85 17.5388
# 8 DAXIndex 2014-12-31 9805.55 16.8639
如果您的ticker
列为factor
,请先将其转换为character
类型。
答案 1 :(得分:2)
您可以尝试order
df$ticker <- factor(df$ticker, levels=unique(df$ticker))
df1 <- df[with(df, order(ticker, date)),]
row.names(df1) <- NULL
df1
# ticker date PX_LAST PE_RATIO
#1 SMI Index 2014-09-30 8835.14 20.3692
#2 SMI Index 2014-10-31 8837.78 20.3753
#3 SMI Index 2014-11-28 9150.46 21.0962
#4 SMI Index 2014-12-31 8983.37 20.6990
#5 DAX Index 2014-09-30 9474.30 16.6487
#6 DAX Index 2014-10-31 9326.87 16.3896
#7 DAX Index 2014-11-28 9980.85 17.5388
#8 DAX Index 2014-12-31 9805.55 16.8639