Р: Конвертировать дями c формат даты в класс даты? - PullRequest
0 голосов
/ 14 января 2020

У меня есть набор данных, который содержит простой столбец, состоящий из дат, например:

      Dates
1  2012/04/10
2  2012/03/30
3  2012/03/24
4  2012/03/25
5  2012/04/10
6  2012/04/14
7  2012/04/21

Мой желаемый вывод такой:

      Dates        DateName
1  2012/04/10     April 2012
2  2015/03/30     March 2015
3  2011/03/24     March 2011
4  2016/12/25     December 2016
5  2014/06/10     June 2014
6  2014/05/14     May 2014
7  2018/07/21     August 2018

Для этого я использовал следующий код:

dt$Dates <- as.Date(dt$Dates)
dt$DateName <- format(dt$Dates,"%B %Y")

Хотя это работает нормально, моя новая колонка выходит из класса символов. Я буду sh, чтобы вместо этого выступать в качестве класса даты. Это потому, что я не могу отсортировать этот столбец по календарной дате. Скорее, он сортируется в алфавитном порядке.

Есть ли способ классифицировать или переклассифицировать мой новый формат даты в качестве какого-либо типа даты или класса каландра?

(I ' я не обязательно ищу решение base-R).

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

Я пробовал следующие строки кода и более, но они только возвращают ошибки.

dt$DateName <- format.Date(dt$Dates,"%B %Y")

dt$DateName <- format.POSIXlt(dt$Dates,"%B %Y")

dt$DateName <- format.difftime(dt$Dates,"%B %Y")

dt$DateName <- as.Date(dt$Dates, format ="%B %Y")

1 Ответ

0 голосов
/ 14 января 2020

Вы можете преобразовать даты в yearmon класс:

dt$month_year <- zoo::as.yearmon(dt$Dates, "%Y/%m/%d")
dt
#       Dates month_year
#1 2012/04/10   Apr 2012
#2 2012/03/30   Mar 2012
#3 2012/03/24   Mar 2012
#4 2012/03/25   Mar 2012
#5 2012/04/10   Apr 2012
#6 2012/04/14   Apr 2012
#7 2012/04/21   Apr 2012

class(dt$month_year)
#[1] "yearmon"

Затем вы можете отсортировать их

dt[order(dt$month_year), ]

#       Dates month_year
#2 2012/03/30   Mar 2012
#3 2012/03/24   Mar 2012
#4 2012/03/25   Mar 2012
#1 2012/04/10   Apr 2012
#5 2012/04/10   Apr 2012
#6 2012/04/14   Apr 2012
#7 2012/04/21   Apr 2012

data

dt <- structure(list(Dates = structure(c(4L, 3L, 1L, 2L, 4L, 5L, 6L
), .Label = c("2012/03/24", "2012/03/25", "2012/03/30", "2012/04/10", 
"2012/04/14", "2012/04/21"), class = "factor")), class = "data.frame",
row.names = c("1", "2", "3", "4", "5", "6", "7"))
...