R: почему класс дат "% b.% Y" не является "Дата"? - PullRequest
0 голосов
/ 21 сентября 2018

Иногда я работаю с такими данными:

sep-2018

С такой даты:

Sys.Date()
[1] "2018-09-21"

Чтобы получить такой результат, я обычно использую:

format(Sys.Date(),'%b-%Y')

Но его class не дата:

 class(format(Sys.Date(),'%b-%Y'))
[1] "character"

Почему это не дата?Возможно ли иметь это с class() = date, и как?

Также во внешней библиотеке, такой как zoo, есть то же самое.

library(zoo)
> class(format(as.yearmon(format(Sys.Date()), "%Y-%m-%d"), "%b.%Y"))
[1] "character"

Также используя "% m.% Y ", кажется, генерирует ту же самую вещь, но это не создает (например) проблему заказа.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Как говорит Рохит, format выводит не объект Date, а строку в выбранном вами формате.

Чтобы получить объект Date из строки типа "sep-2018", вы можете использовать readr::parse_date().

(my_date <- readr::parse_date("sep-2018", format = '%b-%Y'))
#[1] "2018-09-01"

class(my_date)
#[1] "Date"
0 голосов
/ 21 сентября 2018

Команда format берет дату и выводит строку для печати в зависимости от предоставленного вами формата.Чтобы процитировать документацию:

An object of similar structure to x containing character representations of the 
elements of the first argument x in a common format, and in the current 
locale's encoding.

Кроме того, внутренняя переменная Date хранится как числовой тип (количество дней с 1970-01-01)

dput(Sys.Date())
#structure(17795, class = "Date")

structure(0, class = "Date")
#[1] "1970-01-01"

Таким образом, чтобы точно определитьдата, вам нужно день, месяц и год поля.Если у вас нет всех трех, он, вероятно, вернет NA или ошибку.Аналогично для временных классов.Если у вас нет данных, вы можете просто использовать фиктивные значения и использовать формат для печати только тех полей, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...