当我想列出两个日期之间的所有月份时,seq.Date似乎跳过日期。我肯定在我的代码中犯了一个错误,但它很简单,似乎无法做到。
帮助将不胜感激。
seq.Date(as.Date("2017-01-31"),as.Date("2017-06-30"),by = "months")
此致 阿克塞尔
答案 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)