2011-06-05 412 views
33

我需要在R中按日期排序数据框。日期都是“dd/mm/yyyy”的形式。日期在第3栏。列标题是V3。我已经看到如何按列对数据框进行排序,并且我已经看到如何将字符串转换为日期值。我无法将这两者结合起来,以便按日期对数据框进行排序。如何按日期对数据框进行排序

回答

88

假设您的数据帧被命名为d

d[order(as.Date(d$V3, format="%d/%m/%Y")),] 

阅读我的博客文章,Sorting a data frame by the contents of a column,如果这没有意义。

+0

@ 182Much工作完美的第一次。非常感谢 – John 2011-06-05 22:45:51

+0

@John如何投票答案? :) – 2011-06-05 22:50:06

+0

@Prasad Chalasani我很高兴,如果我知道 – John 2011-06-05 22:59:22

13

如果您想按降序对日期进行排序,减号不适用于日期。

out <- DF[rev(order(as.Date(DF$end))),] 

但是,您可以与通用函数rev()具有相同的效果。因此,你喜欢混合转速和订单:

#init data 
DF <- data.frame(ID=c('ID3', 'ID2','ID1'), end=c('4/1/09 12:00', '6/1/10 14:20', '1/1/11 11:10') 
#change order 
out <- DF[rev(order(as.Date(DF$end))),] 

希望它有帮助。

3

如果你只是想重新排列中的R等,从最旧到最新的约会,你总是可以做:

dataframe <- dataframe[nrow(dataframe):1,] 

它救了我进出从Excel只是排序雅虎财经数据导出。

11

现在,使用lubridate和dplyr库是最高效和最舒适的。

d$V3 <- lubridate::dmy(d$V3) 
dplyr::arrange(d, V3) 
0

我发现在源(MM-DD-YYYY HH-MM-SS PM/AM)与个小时的工作,通过美国格式的唯一途径...

df_dataSet$time <- as.POSIXct(df_dataSet$time , format = "%m/%d/%Y %I:%M:%S %p" , tz = "GMT") 
class(df_dataSet$time) 
df_dataSet <- df_dataSet[do.call(order, df_dataSet), ] 
相关问题