我在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年(纪元时代)以来的天数,并且变得难以解释。寻求帮助
答案 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
。但是你不应该使用order
或sort
:as.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.