2011-06-05 461 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), ] 
相關問題