Мне нужно отсортировать фрейм данных по дате в R. Даты составлены в виде "dd/mm/yyyy". Даты указаны в 3-й колонке. Заголовок столбца - V3. Я видел, как сортировать кадр данных по столбцу, и я видел, как преобразовать строку в значение даты. Я не могу объединить эти два для сортировки фрейма данных по дате.
Как отсортировать данные по дате
Ответ 1
Предполагая, что ваш фрейм данных имеет имя d
,
d[order(as.Date(d$V3, format="%d/%m/%Y")),]
Прочтите мое сообщение в блоге Сортировка фрейма данных по содержимому столбца, если это не имеет смысла.
Ответ 2
В настоящее время наиболее эффективно и удобно использовать библиотеки lubridate и dplyr.
lubridate
содержит ряд функций, упрощающих анализ дат в POSIXct
или Date
. Здесь мы используем dmy
который автоматически разбирает даты в форматах Day, Month, Year
. Как только ваши данные будут в формате даты, вы можете отсортировать их с помощью dplyr::arrange
(или любой другой функции упорядочивания) по желанию:
d$V3 <- lubridate::dmy(d$V3)
dplyr::arrange(d, V3)
Ответ 3
Если вы хотите отсортировать даты с нисходящим порядком, знак минус не работает с датами.
out <- DF[rev(order(as.Date(DF$end))),]
Однако вы можете иметь тот же эффект с функцией общего назначения: rev(). Поэтому вы смешиваете 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))),]
Надеюсь, что это помогло.
Ответ 4
Если вы просто хотите изменить даты от самых старых до новейших в r и т.д., вы всегда можете:
dataframe <- dataframe[nrow(dataframe):1,]
Это спасло меня от экспорта и выхода из excel только для сортировки по данным Yahoo Finance.
Ответ 5
Единственный способ, с которым я работал, работать с часами, через формат США в источнике (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), ]
Ответ 6
Вы можете использовать order() для сортировки данных даты.
# 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"))),]
Надеюсь это поможет,
Спасибо