Первый день месяца из даты POSIXct с использованием lubridate

Учитывая дату и время POSIXct, как вы извлекаете первый день месяца для агрегации?

library(lubridate)

full.date <- ymd_hms("2013-01-01 00:00:21")

5 ответов

Решение

Lubridate имеет функцию под названием floor_date который округляет дату-время вниз. Называя это с unit = "month" делает именно то, что вы хотите:

library(lubridate)
full.date <- ymd_hms("2013-01-01 00:00:21")
floor_date(full.date, "month")

[1] "2013-01-01 UTC"

Я не вижу смысла использовать lubridate:

full.date <- as.POSIXct("2013-01-11 00:00:21", tz="GMT")

monthStart <- function(x) {
  x <- as.POSIXlt(x)
  x$mday <- 1
  as.Date(x)
}

monthStart(full.date)
#[1] "2013-01-01"
first.of.month <- ymd(format(full.date, "%Y-%m-01"))
first.of.month

[1] "2013-01-01 UTC"

У меня есть другое решение:

first.of.month <- full.date - mday(full.date) + 1

но для этого нужна библиотека 'lubridate' или 'date.table'(агрегация с data.table)

Вы можете просто использовать базу R trunc:

      d <- as.POSIXct("2013-01-11 00:00:21", tz="UTC")
trunc(d, "month")
#[1] "2013-01-01 UTC"
Другие вопросы по тегам