2014-05-12 23 views

Odpowiedz

20

lubridate posiada funkcję o nazwie floor_date który jest zaokrąglany w dół Date-razy. Nazywając go unit = "month" robi dokładnie to, co chcesz:

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

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

[1] "2013-01-01 UTC" 
10

nie widzę powodu, aby korzystać 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" 
+0

+1 za niestosowanie hackowania (jak ja). – nacnudus

+0

Właśnie natknąłem się na to, dobry sposób, aby o tym porozmawiać. Sprawia, że ​​to naprawdę proste, zbyt skomplikowało to również przy pomocy lubridate. –

1

mam inne rozwiązanie:

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

ale potrzebuje biblioteki 'lubridate' lub 'date.table' (agregacji z data.table)

Powiązane problemy