Первый день месяца из даты 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"