我需要在 R 中按日期对数据框进行排序。 日期的格式都是 "dd/mm/yyyy"。 日期在第三列中,列标题为 V3。 我已经知道如何按列对数据框进行排序,也知道如何将字符串转换成日期值。 但是我不知道如何将它们结合起来以便按日期对数据框进行排序。
现今使用 lubridate 和 dplyr 库是最有效和舒适的。
lubridate
包含许多函数,可以轻松地将日期解析为 POSIXct
或 Date
对象。这里我们使用 dmy
自动解析以 Day, Month, Year
格式表示的日期。一旦你的数据格式为日期格式,你就可以按照需要使用 dplyr::arrange
(或任何其他排序函数)对其进行排序:
d$V3 <- lubridate::dmy(d$V3)
dplyr::arrange(d, V3)
如果您希望按降序排序日期,减号在日期上不起作用。
out <- DF[rev(order(as.Date(DF$end))),]
然而,您可以使用一个通用函数rev()来达到相同的效果。因此,您可以将rev和order结合起来使用,如下所示:
#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))),]
希望它有所帮助。
# Sort date ascending order
d[order(as.Date(d$V3, format = "%d/%m/%Y")),]
# Sort date descending order
d[rev(order(as.Date(d$V3, format = "%d/%m/%y"))),]
希望这能够帮助到您,
我在 Quora 上的回答链接https://qr.ae/TWngCe
谢谢
我发现唯一的处理时间的方法是通过源代码中的美国格式(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), ]
如果你只是想在R等程序中将日期从最早到最新重新排列,你可以使用以下方法:
dataframe <- dataframe[nrow(dataframe):1,]
这使我不必在Excel中来回导入导出,只为了对Yahoo Finance数据进行排序。
dplyr
库中的arrange
。下面的代码片段将修改原始日期字符串为日期对象,并按日期排序。这是一个不错的方法,因为你将日期存储为日期,而不仅仅是字符组成的字符串。dates <- dates %>%
mutate(date = as.Date(date, "%d/%m/%Y")) %>%
arrange(date)
dates <- dates %>%
arrange(date = as.Date(date, "%d/%m/%Y"))
daily_data
的数据集:daily_data <- daily_data[order(as.Date(daily_data$date, format="%d/%m/%Y")),]