我使用橄榄酸,并认为这是如此简单

ymd("2010-01-31")+months(0:23)

但是看看一个人得到什么。一切都搞砸了!

 [1] "2010-01-31 UTC" "2010-03-03 UTC" "2010-03-31 UTC" "2010-05-01 UTC" "2010-05-31 UTC" "2010-07-01 UTC" "2010-07-31 UTC" "2010-08-31 UTC" "2010-10-01 UTC"
[10] "2010-10-31 UTC" "2010-12-01 UTC" "2010-12-31 UTC" "2011-01-31 UTC" "2011-03-03 UTC" "2011-03-31 UTC" "2011-05-01 UTC" "2011-05-31 UTC" "2011-07-01 UTC"
[19] "2011-07-31 UTC" "2011-08-31 UTC" "2011-10-01 UTC" "2011-10-31 UTC" "2011-12-01 UTC" "2011-12-31 UTC"

然后,我阅读了lubratie如何适应现象,例如间隔,持续时间和周期。因此,好的,我意识到一个月实际上是(365*4+1)/48 = 30.438天定义的天数。因此,我试图变得聪明,并将其重写为

ymd("2010-01-31")+ as.period(months(0:23))

但这只是一个错误。

Error in as.period.default(months(0:23)) : 
  (list) object cannot be coerced to type 'double'
有帮助吗?

解决方案

是的,您找到了正确的技巧:从第一个开始的一天 下个月.

这是基本R中的单线:

R> seq(as.Date("2010-02-01"), length=24, by="1 month") - 1
 [1] "2010-01-31" "2010-02-28" "2010-03-31" "2010-04-30" "2010-05-31"
 [6] "2010-06-30" "2010-07-31" "2010-08-31" "2010-09-30" "2010-10-31"
[11] "2010-11-30" "2010-12-31" "2011-01-31" "2011-02-28" "2011-03-31"
[16] "2011-04-30" "2011-05-31" "2011-06-30" "2011-07-31" "2011-08-31"
[21] "2011-09-30" "2011-10-31" "2011-11-30" "2011-12-31"
R> 

所以不需要 橄榄酸 这样的简单任务不需要(虽然是一个很好的软件包)。另外,其现有基本功能的超载仍然使我有些危险...

其他提示

令人惊讶的是,输入一个问题如何集中精力。我想我解决了答案。我不妨将其发布到下一个发现自己浪费时间的可怜的灵魂。

ymd("2010-02-01")+ months(0:23)-days(1)

只需指定下个月的第一天,并从中产生序列,但从中减去1天以获取前一个月的最后一天。

[1] "2010-01-31 UTC" "2010-02-28 UTC" "2010-03-31 UTC" "2010-04-30 UTC" "2010-05-31 UTC" "2010-06-30 UTC" "2010-07-31 UTC" "2010-08-31 UTC" "2010-09-30 UTC"
[10] "2010-10-31 UTC" "2010-11-30 UTC" "2010-12-31 UTC" "2011-01-31 UTC" "2011-02-28 UTC" "2011-03-31 UTC" "2011-04-30 UTC" "2011-05-31 UTC" "2011-06-30 UTC"
[19] "2011-07-31 UTC" "2011-08-31 UTC" "2011-09-30 UTC" "2011-10-31 UTC" "2011-11-30 UTC" "2011-12-31 UTC"

顺便说一句,我如何摆脱讨厌的“ UTC”名称。当需要时,时区是救生员。剩下的时间它们是一个滋扰。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top