Форматирование даты в R без начальных нулей

Есть ли способ использовать format функция объекта даты, в частности, объекта класса POSIXlt, POSIXct, или же Dateс форматом %Y, %m, %d так, что ведущие нули снимаются с каждого из этих 3 полей?

Например, я хотел бы format(as.Date("1998-09-02"), "%Y, %m, %d") возвращать 1998, 9, 2 и не 1998, 09, 02,

2 ответа

Решение

Просто удалите начальные нули в конце:

> gsub(" 0", " ", format(as.Date("1998-09-02"), "%Y, %m, %d"))
[1] "1998, 9, 2"

Используйте %e, чтобы получить начальный пробел вместо начального нуля.

Вы можете сделать это, просто изменив свой strftimeстрока формата. Однако это зависит от вашей платформы (Unix или Windows).

Unix

Вставьте знак минус (-) перед каждым термином, из которого вы хотите удалить ведущие нули:

format(as.Date("2020-06-02"), "%Y, %-m, %-d")
[1] "2020, 6, 2"

Windows

Вставьте знак фунта (#) перед каждым желаемым термином:

format(as.Date("2020-06-02"), "%Y, %#m, %#d")
[1] "2020, 6, 2"

Я нашел обходной путь с помощью year, month а также day функция lubridate пакет С помощью glue::glue, это легко сделать следующим образом:

require(lubridate)
require(glue)
dt <- "1998-09-02"
glue("{year(dt)}, {month(dt)}, {day(dt)}")
# 1998, 9, 2

Более общее решение с использованием gsub для удаления ведущих нулей из цифр дня или месяца, выдаваемых%m или%d. Это удаляет любой ноль, которому не предшествует цифра:

gsub("(\\D)0", "\\1", format(as.Date("1998-09-02"), "%Y, %m, %d"))
Другие вопросы по тегам