'First day of the month from a POSIXct date time using lubridate
Given a POSIXct date time, how do you extract the first day of the month for aggregation?
library(lubridate)
full.date <- ymd_hms("2013-01-01 00:00:21")
Solution 1:[1]
lubridate has a function called floor_date
which rounds date-times down. Calling it with unit = "month"
does exactly what you want:
library(lubridate)
full.date <- ymd_hms("2013-01-01 00:00:21")
floor_date(full.date, "month")
[1] "2013-01-01 UTC"
Solution 2:[2]
I don't see a reason to use 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"
Solution 3:[3]
first.of.month <- ymd(format(full.date, "%Y-%m-01"))
first.of.month
[1] "2013-01-01 UTC"
Solution 4:[4]
i have another solution :
first.of.month <- full.date - mday(full.date) + 1
but it needs the library 'lubridate' or 'date.table' (aggregation with data.table)
Solution 5:[5]
You can also use base R's trunc
:
d <- as.POSIXct("2013-01-11 00:00:21", tz="UTC")
trunc(d, "month")
#[1] "2013-01-01 UTC"
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Sirko |
Solution 2 | Roland |
Solution 3 | nacnudus |
Solution 4 | ah bon |
Solution 5 | Maël |