按字符和日期列对数据框进行排序

Posted

技术标签:

【中文标题】按字符和日期列对数据框进行排序【英文标题】:Sort data frame by character and date columns 【发布时间】:2014-05-08 15:37:59 【问题描述】:

我正在尝试按字符列(降序)和日期变量(升序)对简单数据集进行排序。

   fx_code  date    fx_spot 
1      AUD 2000-01-31  0.6370  
2      AUD 2000-02-29  0.6178   
3      AUD 2000-03-31  0.6071   
4      AUD 2000-04-28  0.5839   
5      AUD 2000-05-31  0.5725   

当我运行以下代码时

DF$date <- as.Date(DF$date, format = "%Y-%m-%d")
DF <- DF[order(DF$fx_code,-DF$date),] 

我收到以下错误:

-.Date(DF$date) 中的错误:一元 - 未为“日期”对象定义

【问题讨论】:

【参考方案1】:

as.numeric 会更容易理解:

DF <- DF[order(DF$fx_code, - as.numeric(DF$date)), ] 

在幕后,xtfrm 实际是这样做的:

> xtfrm(as.Date('2000-04-29', format='%Y-%m-%d'))
[1] 11076
> as.numeric(as.Date('2000-04-29', format='%Y-%m-%d'))
[1] 11076

【讨论】:

我要不要在as.numeric之前添加as.Date到订购前的日期?【参考方案2】:

试试这个:

DF <- DF[order(DF$fx_code, - xtfrm(DF$date)), ] 

【讨论】:

【参考方案3】:

你也可以

rev(order(date_field))
DF <- DF[rev(order(DF$date))]

【讨论】:

以上是关于按字符和日期列对数据框进行排序的主要内容,如果未能解决你的问题,请参考以下文章

根据字符串值列对 pandas 数据帧行进行排序

Bash:按前 4 列对 csv 文件进行排序

Spark - 如何使用列对数据框中的字符串进行切片[重复]

按日期和字符对核心数据属性进行排序

使用超过 1 列对 excel 数据进行排序

按两列对 MySQL 表排序