R 按日期和字符串值对数据帧进行排序

R 按日期和字符串值对数据帧进行排序,r,sorting,dataframe,R,Sorting,Dataframe,我从彭博社下载数据,然后在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.

我从彭博社下载数据,然后在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

您可以尝试订购

 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

df$ticker您可以尝试
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

df$ticker在
data.table
包中有一个函数
chgroup()
,它完全满足您的需求。它将向量中的值分组在一起,同时保留初始顺序。它仅适用于字符向量(
ch
for character)


如果您的
ticker
列是
factor
,则首先将其转换为
字符
类型。

数据表
包中有一个函数
chgroup()
。它将向量中的值分组在一起,同时保留初始顺序。它仅适用于字符向量(
ch
for character)

如果您的
ticker
列为
factor
,则首先将其转换为
字符类型