Как отсортировать фрейм данных по дате

Мне нужно отсортировать фрейм данных по дате в R. Все даты имеют вид «дд / мм / гггг». Даты указаны в 3-м столбце. Заголовок столбца - V3. Я видел, как сортировать фрейм данных по столбцу, и видел, как преобразовать строку в значение даты. Я не могу объединить их, чтобы отсортировать фрейм данных по дате.


person John    schedule 05.06.2011    source источник


Ответы (8)


Предполагая, что ваш фрейм данных называется d,

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

Прочтите мое сообщение в блоге, Сортировка фрейма данных по содержимому столбца, если это не имеет смысла.

person I82Much    schedule 05.06.2011
comment
@ Джон, как насчет голосования за ответ? :) - person Prasad Chalasani; 06.06.2011
comment
@Prasad Chalasani Я был бы рад, если бы знал, как - person John; 06.06.2011
comment
@John, слева от ответа есть стрелка вверх. Вам нужно щелкнуть по нему. И если вы считаете, что это лучший из нескольких ответов, вы также можете нажать на галочку, указывающую на принятый ответ. - person Prasad Chalasani; 06.06.2011
comment
@Prasad Chalasani Извините, но оказалось, что у меня недостаточно очков, чтобы проголосовать - person John; 06.06.2011
comment
@John - ах да, я забыл об этом! - person Prasad Chalasani; 06.06.2011
comment
@John, если это правильный ответ, поставьте галочку рядом с моим предложением, чтобы я получил принятый ответ. - person I82Much; 06.06.2011

На сегодняшний день наиболее эффективно и удобно использовать библиотеки lubridate и dplyr.

lubridate содержит ряд функций, которые упрощают анализ дат на POSIXct или Date объекты. Здесь мы используем dmy, который автоматически анализирует даты в Day, Month, Year форматах. Если ваши данные представлены в формате даты, вы можете отсортировать их с помощью dplyr::arrange (или любой другой функции сортировки) по желанию:

d$V3 <- lubridate::dmy(d$V3)
dplyr::arrange(d, V3)
person Love-R    schedule 04.12.2015
comment
Или с трубками: d% ›% mutate (через (V3, dmy))%›% организовать (V3) - person mharinga; 26.10.2020

Если вы хотите отсортировать даты в порядке убывания, знак минус не работает с датами.

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))),]

Надеюсь, это помогло.

person pommedeterresautee    schedule 15.06.2014

Вы можете использовать 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"))),]

Надеюсь это поможет,

Ссылка на мой ответ на вопрос https://qr.ae/TWngCe

Спасибо

person Nitz    schedule 19.07.2019

Если вы просто хотите переставить даты с самых старых на самые новые в r и т. Д., Вы всегда можете сделать:

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

Это избавило меня от экспорта в Excel и обратно только для сортировки данных Yahoo Finance.

person Cameron Tujen    schedule 03.05.2015

Единственный способ, который я нашел для работы с часами, - через формат США в источнике (мм-дд-гггг ЧЧ-ММ-СС 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), ] 
person Aurélien Prévot    schedule 10.11.2017
comment
Спасибо! Я изо всех сил пытался отсортировать даты в формате posix, и это единственное решение, которое сработало. - person jls; 06.08.2018

Если у вас есть набор данных с именем daily_data:

daily_data<-daily_data[order(as.Date(daily_data$date, format="%d/%m/%Y")),] 
person SATYAJIT MAITRA    schedule 11.04.2020

Вы также можете использовать arrange из библиотеки dplyr.

Следующий фрагмент кода изменит исходную строку даты на объект даты и упорядочит по нему. Это хороший подход, поскольку вы храните дату как дату, а не просто строку символов.

dates <- dates %>%
  mutate(date = as.Date(date, "%d/%m/%Y")) %>%
  arrange(date)

Если вы просто хотите упорядочить по строке (обычно это более низкий вариант), вы можете сделать это:

dates <- dates %>%
  arrange(date = as.Date(date, "%d/%m/%Y"))
person Preston    schedule 16.03.2021