嗨,我正在尝试用lubridate获取一系列日期
这不起作用
seq(ymd('2012-04-07'),ymd('2013-03-22'),by=week(1))
Run Code Online (Sandbox Code Playgroud)
基本命令
seq(as.Date('2012-04-7'),as.Date('2013-03-22'),'weeks')
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有一种优雅的方式与lubridate这样做.
编辑
请忽略:解决自己,所以只留下后人.很高兴在必要时将其删除.
seq(ymd('2012-04-07'),ymd('2013-03-22'),by='weeks')
Run Code Online (Sandbox Code Playgroud)
诀窍
mne*_*nel 66
ymd是一个解析日期字符串并返回一个POSIXct对象的包装器.
您只需使用?seq.POSIXt(非lubridate)中描述的标准术语来定义周
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '1 week')
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = 'weeks')
Run Code Online (Sandbox Code Playgroud)
会有效的
一如既往
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = '2 week')
Run Code Online (Sandbox Code Playgroud)
你可以将lubridate Period类对象强制转换为a difftime,但这似乎是不必要的
seq(ymd('2012-04-07'),ymd('2013-03-22'), by = as.difftime(weeks(1)))
Run Code Online (Sandbox Code Playgroud)
这是一种方法来坚持内POSIXct的宇宙lubridate,而不是更改日期格式的基础R的POSIXt。我避免更改脚本中的日期格式,因为我发现这是引入错误(例如时区更改或丢失时间戳)的常见地方。它遵循以下建议使用%m+%:R:向日期添加 1 个月
# example date is a leap day for a "worst case scenario"
library("lubridate")
posixct.in <- parse_date_time(x = "2016-02-29", orders = "ymd")
# [1] "2016-02-29 UTC"
posixct.seq <- posixct.in %m+% years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2017-02-28 UTC" "2018-02-28 UTC" "2019-02-28 UTC"
posixct.seq <- posixct.in %m+% months(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-29 UTC" "2016-04-29 UTC" "2016-05-29 UTC"
posixct.seq <- posixct.in %m+% days(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-01 UTC" "2016-03-02 UTC" "2016-03-03 UTC"
posixct.seq <- posixct.in %m+% weeks(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-07 UTC" "2016-03-14 UTC" "2016-03-21 UTC"
Run Code Online (Sandbox Code Playgroud)
常规+有时也有效,但%m+%可以防止这样的错误:
posixct.seq <- posixct.in + years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" NA NA NA
Run Code Online (Sandbox Code Playgroud)
起初我很困惑,因为我认为%m+这只是增加月份的一种方式,并且不存在lubridate诸如此类的类似命令%y+%。但是,事实证明“m”并不代表“月份加法”。我最好的猜测是“魔法”=)