在R中基于日期(保留其格式)对数据帧进行排序

时间:2014-04-03 00:48:50

标签: r date dataframe

我在R中有一个包含多列的数据框(df),比如说它具有以下格式

  V1   V2  date
  a1   b1  07/02/13    # a1 is a string, date represents July 2nd, 2013 here
  a2   b2  07/01/13   
  a3   b3  07/01/13
  .................   

我想要的是按照日期(先前先到先得),然后是V1(按字母顺序)对数据框进行排序。我想要的是保留输出中的当前日期格式。

 V1   V2  date
 a2   b2  07/01/13   
 a3   b3  07/01/13
 a1   b1  07/02/13    
      .................   

我尝试使用以下命令,

df$date <- order(as.Date(df$date, format="%d/%m/%Y"))
 arrange(df,desc(date),V1)     # library dplyr  required

但这似乎将日期改为自1970年(纪元时代)以来的天数,并且变得难以解释。寻求帮助

2 个答案:

答案 0 :(得分:1)

函数order仅生成要编制索引的序列。尝试:

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

这会更改列,但您可能想要重新排序数据框

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

答案 1 :(得分:1)

有两个问题:?strptime?order vs ?sort

首先,您应该使用%y表示dd / mm / yy形式的日期(除非日期真的是13 AD - 在耶稣和青春期) 。其次order(x)x的相应元素的等级向量,因此您实际上是在示例中找到sort。但是你不应该使用ordersortas.Date自然地强制执行正确的排序:

df$date <- as.Date(df$date, format="%m/%d/%y")
df <- df[with(df, order(date, V1)), ]

df$date <- as.character(df$date)  # though I'm curious why you need this step.