为什么R seq.Date正在跳过几个月

时间:2018-02-15 14:57:43

标签: r

当我想列出两个日期之间的所有月份时,seq.Date似乎跳过日期。我肯定在我的代码中犯了一个错误,但它很简单,似乎无法做到。

帮助将不胜感激。

seq.Date(as.Date("2017-01-31"),as.Date("2017-06-30"),by = "months")

此致 阿克塞尔

3 个答案:

答案 0 :(得分:3)

如果你真的需要一个月的最后一天,一种可能性是构建跟随月的第一天的序列,然后减去1天。例如:

> seq.Date(as.Date("2017-02-01"),as.Date("2017-07-01"),by = "months") - 1
[1] "2017-01-31" "2017-02-28" "2017-03-31" "2017-04-30" "2017-05-31" "2017-06-30"

答案 1 :(得分:1)

因为你的日期是这个月的最后一天,我相信seq.Date会添加从它开始的月份开始的天数。

如果我们查看示例中输出的sh run.sh

/app

所以看起来diff增加了31天,因为它从1月开始,然后增加了2月的28天等。

可能更好地使用不同的日期,也许可以结合使用一些润滑剂seq.Date(as.Date("2017-01-31"),as.Date("2017-06-30"),by = "months") [1] "2017-01-31" "2017-03-03" "2017-03-31" "2017-05-01" "2017-05-31" diff(seq.Date(as.Date("2017-01-31"),as.Date("2017-06-30"),by = "months")) Time differences in days [1] 31 28 31 30 seq.Date

答案 2 :(得分:0)

我认为另一种解决方案可能是将您的初始日期减少到每月的第一天,并在生成序列后使用包LastDayInMonth中的函数bsts

initial_date <- as.Date("2017-01-31")
day(initial_date) <- 1 # This is only in case you can't use first date of month
# in the initial assignment.
# As when you have several dates and you want to automate process.
desired_sequence <- seq.Date(initial_date,as.Date("2017-06-30"),by = "months")
library(bsts)
desired_sequence <- LastDayInMonth(desired_sequence)